【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
相关文章推荐
- Python多重继承引发的问题——牛逼的super
- python中使用多继承问题和super()内置函数的使用
- python继承中super的问题
- [置顶] python入门:类的多重继承问题、重写、未绑定的超类方法、super()
- Python 2.7不能使用super继承tk的问题
- python基础-__init__引入继承、super、继承顺序
- python 27 super继承(解决多重继承时,老办法init父类多次的问题)
- python 详解类class的继承、__init__初始化、super方法(五)
- python 27 super继承(解决多重继承时,老办法init父类多次的问题)
- python中类的继承,初始化,super()__init__()方法
- python类中super()和__init__()的区别
- 由一个简单示例 引出java继承中父子类成员变量共享问题 以及super的使用
- 浅谈Python中重载isinstance继承关系的问题
- 深入浅析python继承问题
- Python中super()和__init__()方法
- python基础----多态与多态性、super函数用法、继承原理
- python中的__init__函数重载与覆盖问题
- Python的类,类的继承,类中__init__( ),__str__( ),__del__( ),类中的self
- python类继承时构造函数的运行问题
- python继承,调用未绑定的父类方法,super,多级继承