Python:谁拥有传递给super(args)的参数.__ init __()

时间:2014-02-27 13:56:54

标签: python oop inheritance pyqt

根据python中的继承,要覆盖构造函数并同时实现它,你可以使用类似的东西

class Dog :
    def __init__(self, name) :
        self.name = name 
        print("This is a dog named {}".format(self.name))

class Bingo(Dog) :
    def __init__(self, name) :
        super().__init__(self.name)

但是我注意到在我遇到的一些代码中,超级本身带有像

这样的论点
    super(self, name).__init__()

所以,如果我可能会问,传递的参数在哪里,是父类还是什么。我发现很难把它包裹起来,我实际上在PyQt和PySide

中的代码上遇到了它

1 个答案:

答案 0 :(得分:0)

在Python 2.x中,您必须编写

class Bingo(Dog) :
    def __init__(self, name) :
        super(Dog, self).__init__(name)

因为super需要超类名称(Dog)和实例(self)。超级__init__Dog.__init__所以通常来自Bingo.__init__ args(例如名称),而不是你拥有它(self.name,不正确,因为还不存在)。

在Python 3.0中,您可以编写

class Bingo(Dog) :
    def __init__(self, name) :
        super().__init__(name)

因为super()获得了额外的行为,因此可以为您找出Dogself