首页 > 编程语言 > 详细

Python-类继承

时间:2018-11-08 17:32:36      阅读:189      评论:0      收藏:0      [点我收藏+]

当在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-类继承

原文:https://www.cnblogs.com/kang2008/p/9930090.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!