如何从Python中的继承类正确调用基类方法(和构造函数)?
假设我有一个Base
类和一个Child
类继承自Base
。从Python中的子类调用基类构造函数的正确方法是什么?我是否使用super
?如何从Python中的继承类正确调用基类方法(和构造函数)?
这里是我到目前为止的例子:
class Base(object):
def __init__(self, value):
self.value = value
...
class Child(Base):
def __init__(self, something_else):
super(Child, self).__init__(value=20)
self.something_else = something_else
...
这是正确的吗?
谢谢,Boda Cydo。
这是正确的。请注意,您也可以直接拨打__init__
方法上Base
类,如下所示:
class Child(Base):
def __init__(self, something_else):
Base.__init__(self, value = 20)
self.something_else = something_else
这是我一般做的方式。但是它很沮丧,因为它在多重继承的情况下表现不佳。当然,多重继承有它自己的各种奇怪效果,所以我避免它像瘟疫一样。
一般来说,如果你使用的类继承使用super
,你也需要。
是的,这是正确的。如果你希望能够通过value
到Child
类,你可以这样来做
class Child(Base):
def __init__(self, value, something_else):
super(Child, self).__init__(value)
self.something_else = something_else
...
感谢您演示如何将值传递给Child,然后将此值传递给Base! – bodacydo 2010-03-10 23:11:17
您还需要确保Child的所有超类都可以接受该值,并将其传递,因为通常情况下,您无法确定Base是否是下一个调用的值。 – 2010-03-10 23:25:07
如果你使用的是Python 3.1,超强的是新的和改进。它为你指出了类和实例的参数。所以,你应该叫超级无参数:
class Child(Base):
def __init__(self, value, something_else):
super().__init__(value)
self.something_else = something_else
...
伊格纳西奥,我测试了它,但也有其他的方式,例如,在'Child',我可以做'高清__init __(自我,something_else):基本.__的init __(值= 20)',我不知道我是否可以做到这一点......因此,我要求知道如何以现代Python的方式完全正确地做到这一点。 – bodacydo 2010-03-10 23:09:50