Python-类继承
当在Python中出现继承的情况时,初始化函数_init_的行为如下:
子类没有定义初始化函数,父类的初始化函数会被默认调用;但要实例化子类的对象,则只能传入父类的初始化函数对应的参数,否则会出错。
子类定义了初始化函数,而子类中没有显示调用父类的初始化函数,则父类的属性不会被初始化
子类定义了初始化函数,而且在子类中显示调用父类的初始化函数,则子类和父类的属性都会被初始化
super主要来调用父类方法来显示调用父类,在子类中,子类会继承父类的所有的属性和方法,子类也可以覆盖父类同名的属性和方法。
class Person():
def __init__(self):
print('Hi Person')
def sy(self):
print('Hi sy')
class Student(Person):
def sk(self):
super().sy()
def sd(self):
super(Student,self).sy()
def sh(self):
Person.sy(self)
s=Student()
s.sy()
s.sk()
s.sd()
s.sh()
结果显示如下:
Hi Person
Hi sy
Hi sy
Hi sy
Hi sy
多重继承:
Python3以后均为新式类,可使用实例的属性__mro__来查看类的继承查找顺序
>>> class Per():
pass
>>> class Stu(Per):
pass
>>> class Gla(Per):
pass
>>> class Fin(Stu,Gla):
pass
>>> print(Fin.__mro__)
(<class '__main__.Fin'>, <class '__main__.Stu'>, <class '__main__.Gla'>, <class '__main__.Per'>, <class 'object'>)
但是如果Gla不是继承Per,则继承查找顺序会改变
>>> class Msg():
pass
>>> class Inf(Msg):
pass
>>> class Fid(Stu,Inf):
pass
>>> print(Fid.__mro__)
(<class '__main__.Fid'>, <class '__main__.Stu'>, <class '__main__.Per'>, <class '__main__.Inf'>, <class '__main__.Msg'>, <class 'object'>)
>>>
浙公网安备 33010602011771号