子类化Python类以继承超类的属性

时间:2014-01-26 00:59:33

标签: python inheritance

我试图从超级类继承属性,但它们没有被正确初始化:

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的实例并使用它的属性,为了简单起见,我需要它继承它。

2 个答案:

答案 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()