我不明白python中方法的顺序

时间:2019-05-13 18:29:56

标签: python

我不明白为什么代码使用D类中的print_me方法,而不使用A类中的方法。

我使用打印语句进行了一些测试,可以看到它在初始化类A之前读取了类D的print_me-method,但是我不明白为什么它对类A却没有做同样的事情。

class A:
    name = "Alfa"

    def __init__(self, foo):
        self.foo = foo
        foo = 100
        self.print_me()

    def print_me(self):
        print(self.name, self.foo)

class B(A):
    name = "Beta"

    def __init__(self, bar = 40):
        self.bar = bar
        print(self.name, bar)

class C:
    name = "Charlie"

class D(A, C):
    name = "Delta"

    def __init__(self, val):
        A.__init__(self, val)

    def print_me(self):
        print(self.name, "says", self.foo)

d = D(60)

输出为:Delta说60

我想应该是:Delta 60

1 个答案:

答案 0 :(得分:3)

因为您传递给self的{​​{1}}的{​​{1}}仍然是__init__的实例,而不是A。函数D正在调用A的{​​{1}}。

如果您A.__init__,您会得到期望的结果。

重要说明:python 中的self.print_me方法不是的实际构造方法,它只是在 的实际构造后自动称为的方法。宾语。但是,当您自己调用它时,它的工作原理与其他任何方法一样。