此代码抛出一个异常,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