我不明白为什么代码使用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
答案 0 :(得分:3)
因为您传递给self
的{{1}}的{{1}}仍然是__init__
的实例,而不是A
。函数D
正在调用A
的{{1}}。
如果您A.__init__
,您会得到期望的结果。
重要说明:python 中的self.print_me
方法不是的实际构造方法,它只是在 的实际构造后自动称为的方法。宾语。但是,当您自己调用它时,它的工作原理与其他任何方法一样。