有或没有自我的构造函数?

时间:2017-01-08 11:35:53

标签: python

我对某项计划有疑问:

class A:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def to_string(self):
        return "x, y = (" + str(self.x) + ", " + str(self.y) + ")"

    def __str__(self):
        return self.to_string()


class B(A):
    def __init__(self, z, *args):
        A.__init__(self, *args)
        self.z = z

    def __str__(self):
        return super().__str__()


class C(A):
    def __init__(self, *args):
        super().__init__(*args)

    def to_string(self):
        return "Klasse C, " + super().to_string()

为什么我要写

A.__init__(self, *args)

而不是

A.__init__(*args)

在C级它有效吗? 很多问候

1 个答案:

答案 0 :(得分:4)

您正在访问未绑定方法,因此未传入selfA.__init__没有上下文可以知道要绑定的实例。

您可以通过多种方式提供该背景信息:

  • 明确地传递self,就像你一样。
  • 使用A.__init__.__get__(self)(*args)
  • 手动绑定
  • 在Python 3中,使用super().__init__(*args),然后从当前方法中获取上下文。请参阅Why is Python 3.x's super() magic?