此代码引发异常,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()
在类A中,您需要调用
A
方法并手动传入self
,而不是调用self
方法。这不是正常的做事方式——你应该有一个很好的理由这样做。
在代码中:
self是B的一个例子
当从a派生的方法被B的实例调用时,它将开始在B的命名空间中查找,并且只有在找不到该方法(例如没有被B重写)时,才使用a的实现,但始终自引用B。在任何情况下,self都不是a的实例
它按预期工作,因为世界上100%的编程语言都在工作。子类重写父类的所有方法。
但是,如果您真的想调用A.foo1(),您可能可以这样做(我不能保证)。无论如何,你不能这样做,因为这违背了良好编程的所有原则。
相关问题 更多 >
编程相关推荐