考虑一下 - 基类A,继承自A的类B,继承自B的类C.什么是在构造函数中调用父类构造函数的通用方法?如果这仍然听起来太模糊,这里有一些代码.
class A(object):
    def __init__(self):
        print "Initialiser A was called"
class B(A):
    def __init__(self):
        super(B,self).__init__()
        print "Initialiser B was called"
class C(B):
    def __init__(self):
        super(C,self).__init__()
        print "Initialiser C was called"
c = C()
这就是我现在这样做的方式.但它仍然看起来有点过于非泛型 - 您仍然必须手动传递正确的类型.
现在,我尝试使用self.__class__作为super()的第一个参数,但是,显然它不起作用 - 如果你把它放在C的构造函数中 - 公平,B的构造函数被调用.如果你在B中做同样的事情,"self"仍然指向一个C的实例,所以你最终再次调用B的构造函数(这以无限递归结束).
现在没有必要考虑钻石继承,我只想解决这个具体问题.
潜入Python -
将它称为类的构造函数会很诱人但不正确.这很诱人,因为它看起来像构造函数(按照惯例,
__init__是为类定义的第一个方法),就像一个(它是在新创建的类实例中执行的第一段代码),甚至听起来像一个( "init"肯定表明了构造函数的本质.不正确,因为调用时已经构造了对象__init__,并且您已经拥有对该类的新实例的有效引用.
报价表明,它是不正确调用__init__的构造函数,因为该对象已建成的时候__init__被调用.但!我一直的印象是,在构造函数只调用构造对象之后,因为它本质上是使用,如果该对象未通过时存在来初始化实例,它是没有意义的数据成员的构造函数被调用?(来自C++/Java背景)