如果一个类继承多个类,为什么超类可以相互访问其他超类的函数?超类从哪里获取引用?
例如
class A():
def a_method(self):
print "I am a"
class B():
def b_method(self):
self.a_method()
class test(A, B):
def test_method(self):
self.b_method()
if __name__ == "__main__":
test_instance = test()
# Will print a_method
test_instance.test_method()
test_b = B()
try:
# will raise exception
test_b.b_method()
except Exception as e:
print e
答案 0 :(得分:1)
将类定义为从两个超类继承时
class test(A, B):
它将两个超类中的方法继承到相同的命名空间。因此,从test()
开始,您可以同时调用self.a_method()
和self.b_method()
。我认为,您的问题是调用self.b_method()
来自test
的实例,而不是B
的实例。它适用于test
,因为两个方法都在同一个命名空间中,当b_method()
调用a_method()
时,它可以被"看到"来自班级内部,呼叫成功。在实例化B
时,A
不会继承,a_method()
不可见,因此会引发异常。
可以使用dir
检查与类或实例关联的方法和属性:
>>> test_instance = test()
>>> dir(test_instance)
['__doc__', '__module__', 'a_method', 'b_method', 'test_method']