我试图从超级类继承属性,但它们没有被正确初始化:
class Thing(object):
def __init__(self):
self.attribute1 = "attribute1"
class OtherThing(Thing):
def __init__(self):
super(Thing, self).__init__()
print self.attribute1
这会引发错误,因为即使Thing.attribute1存在,attribute1也不是OtherThing的属性。我认为这是继承和扩展超类的正确方法。难道我做错了什么?我不想创建Thing的实例并使用它的属性,为了简单起见,我需要它继承它。
答案 0 :(得分:9)
您必须将argument作为super()
的类名(被调用的地方):
super(OtherThing, self).__init__()
根据Python docs:
...
super
可用于引用父类而不命名它们 显式,从而使代码更易于维护。
所以你不应该给父类。 请参阅Python docs中的此示例:
class C(B):
def method(self, arg):
super(C, self).method(arg)
答案 1 :(得分:2)
Python3使这很简单:
#!/usr/local/cpython-3.3/bin/python
class Thing(object):
def __init__(self):
self.attribute1 = "attribute1"
class OtherThing(Thing):
def __init__(self):
#super(Thing, self).__init__()
super().__init__()
print(self.attribute1)
def main():
otherthing = OtherThing()
main()