-1

当我调用 x=D() 为什么不调用 C 的init () 只有 B 的init () 被调用然后立即调用 D 的构造函数.. 不应该顺序是 B,A,C,D 其次,xf()显示错误参数传递的错误..

在此处输入图像描述

我究竟做错了什么??

4

1 回答 1

1

关于 f,您只是忘记了将它们声明为方法的 self 关键字。

对于构造函数的调用,您需要在继承树的每个类中使用“super”。

class A(object):
    def __init__(self):
        super(A, self).__init__()
        print "A.__init__"

    def f(self):
        print "A.f"

class B(A, object):
    def __init__(self):
        super(B, self).__init__()
        print "B.__init__"

class C(object):
    def __init__(self):
        super(C, self).__init__()
        print "C.__init__"

    def f(self):
        print "C.f"

class D(B, C, object):
    def __init__(self):
        super(D, self).__init__()
        print "D.__init__"

x = D()
x.f()

你会得到:

C.__init__
A.__init__
B.__init__
D.__init__
A.f
于 2014-08-18T07:52:44.067 回答