此代碼拋出一個異常,AttributeError,「wtf!」,因爲A.foo()
正在調用B.foo1()
,是不是應該撥打A.foo1()
?我怎樣才能迫使它調用A.foo1()
(和內A.foo()
任何方法調用應該調用A.*
)調用覆蓋方法,超類調用覆蓋方法
class A(object):
def foo(self):
print self.foo1()
def foo1(self):
return "foo"
class B(A):
def foo1(self):
raise AttributeError, "wtf!"
def foo(self):
raise AttributeError, "wtf!"
def foo2(self):
super(B, self).foo()
myB = B()
myB.foo2()
你基本上要求Python拋棄動態性和虛擬方法,並*以某種方式*根據函數的詞法定義跳過部分屬性查找鏈。不會發生。 – delnan