我如何知道python core的工作方式?

时间:2019-08-23 20:21:04

标签: python

我如何知道核心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的行为吗?

1 个答案:

答案 0 :(得分:0)

您假设self.a引用A.a只是因为它出现在A.b的定义中。这不是真的; self.a的行为由self运行时类型决定。

由于aB的实例,所以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从未被呼叫。