一、简介
1、作用
简化代码
2、分类
一个父类可以被多个多个子类继承
一个子类可以继承多个父类---python独有
3、新式类和经典类
python3中,只含义新式类,新式类默认继承Object
python2.7中含义经典类和新式类,新式类需要继承Object
4、方法
类名.__base__查看该类的继承顺序
类.mro(),返回类的调用顺序
classA:print('A')classB(A):print('B')classC(A):print('C')classD(B, C):print('D')print(D.__bases__) #(, )
print(D.mro()) #[, , , , ]
二、单继承
1、派生
派生属性:在子类中,创建父类中没有的属性
派生方法:在子类中,创建父类中没有的方法
2、顺序
1)子类对象的调用顺序
子类属性、方法,若没有到父类的属性、方法,若没有到Object,若没有,则报错
2)调用父类
1)通过子类对象调用,若子类有同名方法,会调用子类的方法
2)通过父类名直接调用父类
3)使用super(类名, 已定义的对象名).类方法名
3、用父类的属性、方法
1)父类名.__init__(self, 父类的其它属性)
2)super().__init__(父类的其它属性)
4、super()
super()方法只在python3中存在
在类内部可以不写()内的类名和对象名
super()的本质:不是单纯找父类,而是根据调用者的节点位置的广度优先顺序来的
classPerson:def __init__(self, name, sex, age):
self.name=name
self.sex=sex
self.age=agedefintroduce(self):print('父类方法', self.name)classStudent(Person):def __init__(self, name, sex, age, grade):
Person.__init__(self, name, sex, age) #通过父类直接调用__init__方法
self.grade = grade #派生属性
def gr(self): #派生方法
print(self.grade)classWorker(Person):def __init__(self, name, sex, age, money):
super(Worker, self).__init__(name, sex, age) #Worker, self 可以不写
self.money = money #派生属性
def make(self): #派生方法
print(self.money)
s1= Student('tom', 'man', 24, 99)
s1.gr()#99
print(s1.name) #tom
s1.introduce() #父类方法 tom, 调用父类方法,若子类有同名方法,会调用子类的方法
Person.introduce(s1) #调用父类方法
super(Student, s1).introduce() #调用父类方法
三、多继承
1、一个子类继承多个父类
2、调用顺序
默认是就近原则
新式类:广度优先
经典类:深度优先
3、新式类
1)钻石继承
classD:print('D')classB(D):print('B')classC(D):print('D')classA(B, C):print('A')
2)
3)
4、经典类
深度优先,一条路走到黑
ps:组合和继承怎么抉择?
组合:什么有什么
继承:什么是什么
本文详细介绍了Python中的继承概念,包括继承的作用、分类、新式类与经典类的区别,以及单继承和多继承的工作原理。通过实例展示了如何创建派生属性和方法,如何调用父类的属性和方法,以及super()函数的使用。同时讨论了新式类和经典类在调用顺序上的差异,并提到了组合与继承的选择问题。

被折叠的 条评论
为什么被折叠?



