派生与继承
继承(组合)
继承指的是新建类的方法,新建的类称之为子类或者派生类
子类继承的类叫做父类,也称之为基类或者超类
特征:(面试)
子类可以继承父类的属性(特征或者技能),并且可以派生出自己的属性(特征与技能)
注:在Python中,一个子类可以继承多个父类,其他语言只能一个子类继承一个父类
继承的目的:
为了减少代码的冗余度
继承实现的方法:
1: 首先确定谁是子类,谁是父类
2 在定义时,子类(父类),实现继承
如何寻找继承关系:
先抽象,再继承
抽象:抽取相似的部分,称之为抽象
继承的关系:对象是特征和技能的结合体;
? 类是一系列对象相同特征和技能的结合体;
? 继承是一系列类相同特征和技能的结合体。
继承背景下,对象属性的查找顺序:
1 对象查找顺序会先从对象的名称空间中查找
2 对象里面没有,则再去类中
3 若当前类是子类,并且类中没有对象需要找的属性,再去父类查找
注:对象查找属性,孺子雷友,不管父类有没有,以子类的为准
派生
派生指的是子类继承父类的属性,并且派生出新的属性。
子类派生出新的属性,若是与父类的属性相同,则以子类为准;
集成式谁与谁的关系,指的是类与类的关系,子类与父类是从属关系。
子类派生出新的属性并且重用父类的属性:
父类:
class OldboyPeople:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
方式一:直接通过父类调用__ init __ ,把 __ init __当做普通函数调用,传入对象与集成的属性
class OldboyTeacher(OldboyPeople):
# 等级, 薪资
def __init__(self, name, age, sex, level, sal):
OldboyPeople.__init__(self, name, age, sex)
self.level = level
self.sal = sal
class OldboyStudent(OldboyPeople):
# 课程
def __init__(self, name, age, sex, course):
OldboyPeople.__init__(self, name, age, sex)
self.course = course
def choose_course(self):
print(f'学生{self.name}选择课程{self.course}')
方式二:super是一个特殊的类,在子类中调用super()会得到一个特殊的保护对象,通过“.”指向命名空间
class OldboyTeacher(OldboyPeople):
# 等级, 薪资
def __init__(self, name, age, sex, level, sal):
super().__init__(name, age, sex)
self.level = level
self.sal = sal
class OldboyStudent(OldboyPeople):
# 课程
def __init__(self, name, age, sex, course):
super().__init__(name, age, sex)
self.course = course
def choose_course(self):
print(f'学生{self.name}选择课程{self.course}')
新式类与经典类(面试):
在Python2 中才有经典类与新式类的区分
在Python3中,所有的类都是新式类
新式类:
继承object的类,称之为新式类
Python3中,子类不继承自定义的类!他只默认继承继承object
经典类:
在Python2 中,凡是没有继承object的类,都是经典类
“”“
mro():属于object——》type的函数,用来查看当前类的及策划那个顺序,再多继承的情况下
class C(A, B):
# print('C...')
# x = 1
pass
print(C.mro())
”“”
钻石继承:(面试)
钻石继承也称为菱形继承。
再多继承的情况下形成的钻石继承(继承顺序):
? 经典类:深度优先
? 新式类:广度优先
原文地址:https://www.cnblogs.com/justztz/p/11651469.html