语法
py 支持多继承.
class A: # 定义父类
def __init__(self, a=None):
pass
def myMethod(self):
print('调用父类方法')
class B: # 定义父类
def __init__(self, b=None):
pass
class C(A, B): # 定义子类
def myMethod(self):
print
'调用子类方法'
def __init__(self, a, b):
# 调用A类的构造函数
super(C, self).__init__(a=a)
# 调用B类的构造函数
super(A, self).__init__(b=b)
c = C(1,2) # 子类实例
c.myMethod() # 子类调用重写方法
重写
子类中的方法会覆盖父类中的同名方法.
MRO
Method Resolution Order, 方法判定顺序. 多个父类间存在同名的函数时, 子类如何继承? 由MRO 机制决定.
简单描述, 先是子类自己(对应方法重写的情况),然后继承列表从左到右, 越靠前的优先级越高, 如 class C(A,B)
这一定义, 子类继承的将是A的方法, B的同名方法不可用.
super
super是一个py内置类而不是关键字. super()
是super(type, obj)
的简写,在调用super()时,type参数传入的是当前的类,obj参数传入的是当前的实例对象.
它返回的是一个代理类, 是obj所属类的MRO中,排在type之后的下一个父类。也可以这么说, 它返回的是type类的父类或兄弟类. 是有点别扭, 详见参考[1].
典型使用场景为多继承中的构造函数调用, 见文章开始的示例代码.
相关内置函数
- issubclass(A,B),返回bool值.
参考
- cnblog,python中的super()用法以及多继承协同任务