理解python中方法解析排序的概念

时间:2014-08-18 07:40:31

标签: python method-resolution-order

当我调用x = D()时,为什么C' init ()没有被调用只有B' init ()被调用然后立即将D的构造函数命令为B,A,C,D 其次,x.f()显示错误参数传递的错误..

enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分: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