我如何知道核心python将如何工作。
例如,见以下代码:
class A(object): def a(self): print 111111 def b(self): self.a() class B(A): def a(self): print 222222
当我这样做的时候
a = B() a.b()
它正在打印
222222
如果你说“self”是类B的对象,所以它调用自己的方法,但在定义“self”是类B的对象的地方,它为什么不打印“11111”?
在哪里可以看到从类B调用“a”方法的内部逻辑?
每次我遇到这个逻辑,我都会忘记并假设它会打印“111111”,那么有什么方法可以检查内部的python行为吗?
你是在假设 self.a 指 A.a 只是因为它发生在 A.b . 那不是真的;行为 自我。a 是由 运行时 类型 self .
self.a
A.a
A.b
自我。a
self
自从 a 是 B , a.b() 与 type(a).b(a, b) 或 B.b(a, b) . 自从 B.b 未定义,属性查找过程返回到 A、 乙 . 内部 A、 乙 , self == a ,所以我们现在有了 a.a() ,这同样相当于 type(a).a(a) == B.a(a) . 因此, A、 一个 从来没人打过电话。
a
B
a.b()
type(a).b(a, b)
B.b(a, b)
B.b
A、 乙
self == a
a.a()
type(a).a(a) == B.a(a)
A、 一个