Python-类继承,,当在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 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‘>)
>>> 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‘>)
>>>

Python-类继承

评论关闭