[英]Python Inheritance and __init__
我正在学习Python,我发现了一些关于Python如何构造一个令我困惑的子类的东西。
我有一个继承自列表类的类,如下所示。
class foo(list):
def __init__(self, a_bar):
list.__init__([])
self.bar = a_bar
我知道list.__init__([])
需要在那里,但我对此感到困惑。 在我看来,这一行只会创建一个新的列表对象,然后将其分配给任何东西,所以我怀疑它只会被垃圾收集。 Python如何知道这个列表是我的对象的一部分? 我怀疑幕后发生了一些事情,我想知道它是什么。
这种多继承安全的方法是:
class foo(list):
def __init__(self, a_bar):
super(foo, self).__init__()
...
这或许可以让你更清楚你正在调用基类ctor。
通常在子类化和覆盖__init__()
函数时执行此操作:
list.__init__(self)
如果您使用的是Python 3,则可以使用super()
:
super().__init__()
你是部分正确的:
list.__init__([])
“创建一个新的列表对象。” 但是这段代码错了。 正确的代码_should_be:
list.__init__(self)
你需要它的原因有,因为你是从继承list
有它自己的__init__()
方法来初始化自己的地方(大概)确实很重要。 当您定义自己的__init__()
方法时,您实际上会覆盖同名的继承方法。 为了确保父类的__init__()
代码也被执行,您需要调用该父类的__init__()
。
有几种方法可以做到这一点:
#explicitly calling the __init__() of a specific class
#"list"--in this case
list.__init__(self, *args, **kwargs)
#a little more flexible. If you change the parent class, this doesn't need to change
super(foo, self).__init__(*args, **kwargs)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.