如何在 python 中调用多个基 类 __init__
How to call multiple base classes __init__ in python
我怀疑多个 class 是否继承到派生的 class。我们如何调用所有基数class的init。
class Base1(object):
def __init__(self):
print('Constructor of Base1 Class')
class Base2(object):
def __init__(self):
print('Constructor of Base2 Class')
class Base3(object):
def __init__(self):
print('Constructor of Base3 Class')
class Derived(Base1, Base2, Base3):
def __init__(self):
super(Derived, self).__init__()
print('Constructor of Derived Class')
if __name__ == '__main__':
inst = Derived()
当我运行上面的代码。我得到如下输出
Constructor of Base1 Class
Constructor of Derived Class
我认为 Base2 和 Base3 __init__
没有被调用。有什么办法吗
您需要在每个构造函数中调用 super()
,以便它从 _mro_
的列表中调用 __init__()
class Base1(object):
def __init__(self):
super().__init__()
print('Constructor of Base1 Class')
class Base2(object):
def __init__(self):
super().__init__()
print('Constructor of Base2 Class')
class Base3(object):
def __init__(self):
super().__init__()
print('Constructor of Base3 Class')
class Derived(Base1, Base2, Base3):
def __init__(self):
# super(Derived, self).__init__()
super().__init__()
print('Constructor of Derived Class')
if __name__ == '__main__':
inst = Derived()
Constructor of Base3 Class
Constructor of Base2 Class
Constructor of Base1 Class
Constructor of Derived Class
我认为这是正确的做法:
class Base1(object):
def __init__(self):
print('Constructor of Base1 Class')
class Base2(object):
def __init__(self):
print('Constructor of Base2 Class')
class Base3(object):
def __init__(self):
print('Constructor of Base3 Class')
class Derived(Base1, Base2, Base3):
def __init__(self):
Base1.__init__(self)
Base2.__init__(self)
Base3.__init__(self)
print('Constructor of Derived Class')
输出:
inst = Derived()
Constructor of Base1 Class
Constructor of Base2 Class
Constructor of Base3 Class
Constructor of Derived Class
来源:
https://www.journaldev.com/14623/python-multiple-inheritance
我怀疑多个 class 是否继承到派生的 class。我们如何调用所有基数class的init。
class Base1(object):
def __init__(self):
print('Constructor of Base1 Class')
class Base2(object):
def __init__(self):
print('Constructor of Base2 Class')
class Base3(object):
def __init__(self):
print('Constructor of Base3 Class')
class Derived(Base1, Base2, Base3):
def __init__(self):
super(Derived, self).__init__()
print('Constructor of Derived Class')
if __name__ == '__main__':
inst = Derived()
当我运行上面的代码。我得到如下输出
Constructor of Base1 Class
Constructor of Derived Class
我认为 Base2 和 Base3 __init__
没有被调用。有什么办法吗
您需要在每个构造函数中调用 super()
,以便它从 _mro_
__init__()
class Base1(object):
def __init__(self):
super().__init__()
print('Constructor of Base1 Class')
class Base2(object):
def __init__(self):
super().__init__()
print('Constructor of Base2 Class')
class Base3(object):
def __init__(self):
super().__init__()
print('Constructor of Base3 Class')
class Derived(Base1, Base2, Base3):
def __init__(self):
# super(Derived, self).__init__()
super().__init__()
print('Constructor of Derived Class')
if __name__ == '__main__':
inst = Derived()
Constructor of Base3 Class
Constructor of Base2 Class
Constructor of Base1 Class
Constructor of Derived Class
我认为这是正确的做法:
class Base1(object):
def __init__(self):
print('Constructor of Base1 Class')
class Base2(object):
def __init__(self):
print('Constructor of Base2 Class')
class Base3(object):
def __init__(self):
print('Constructor of Base3 Class')
class Derived(Base1, Base2, Base3):
def __init__(self):
Base1.__init__(self)
Base2.__init__(self)
Base3.__init__(self)
print('Constructor of Derived Class')
输出:
inst = Derived()
Constructor of Base1 Class
Constructor of Base2 Class
Constructor of Base3 Class
Constructor of Derived Class
来源: https://www.journaldev.com/14623/python-multiple-inheritance