Python-类继承

Posted kang09

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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-类继承的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖继承的嵌套类中存在的虚拟方法

python 面向对象专题:继承

python 面向对象专题:继承

请解释python面向对象中的继承

Python面向对象:继承多态类属性和类方法单例

Python面向对象:继承多态类属性和类方法单例