我如何知道核心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的对象,那么它不打印“ 11111”的原因可能是什么,所以它调用了自己的方法,但是在其中定义为“ self”是对象的对象B班?
我在哪里可以看到从类B调用'a'方法的内部逻辑?
每次我遇到这种逻辑时,我都会忘记并假设它会显示“ 111111”,那么有什么方法可以检查内部python的行为吗?
答案 0 :(得分:0)
您假设self.a
引用A.a
只是因为它出现在A.b
的定义中。这不是真的; self.a
的行为由self
的运行时类型决定。
由于a
是B
的实例,所以a.b()
与type(a).b(a, b)
或B.b(a, b)
相同。由于未定义B.b
,因此属性查找过程将退回到A.b
。在A.b
中,self == a
内,所以我们现在有a.a()
,它再次等效于type(a).a(a) == B.a(a)
。结果,A.a
从未被呼叫。