您的位置:首页 > 编程语言 > Python开发

【Python】Python3 多继承的super init()问题

2017-12-05 17:15 435 查看
class Song():
def __init__(self, author):
self._author = author

class Singer():
def __init__(self, name):
self._name = name

class Mtv(Song, Singer):
def __init__(self, name, author):
super().__init__(author)         # init Song
super(Song, self).__init__(name) # init Singer

mtv = Mtv('name', 'author')
print('mtv._author =', mtv._author)
print('mtv._name =', mtv._name)


# Mtv 的 MRO
(<class '__main__.Mtv'>, <class '__main__.Song'>, <class '__main__.Singer'>, <class 'object'>)`

# 运行结果
mtv._author = author
mtv._name = name


Song 跟 Singer 不必呼叫 super

super(type, obj_or_type) 会按照 MRO 的顺序去委托 type 的 父类 或 兄弟类 的方法来调用

super().__init__(author) 会找到
<class '__main__.Song'>
并调用其 __init__(author)

super(Song, self).__init__(name) 会找到
<class '__main__.Singer'>
并调用其 __init__(name)

不要一说到 super 就想到父类!super 指的是 MRO 中的下一个类

不要一说到 super 就想到父类!super 指的是 MRO 中的下一个类

不要一说到 super 就想到父类!super 指的是 MRO 中的下一个类

在 MRO 中,基类永远出现在派生类后面,如果有多个基类,基类的相对顺序保持不变。

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: