python – 调用重写方法,超类调用重写方法

这段代码抛出一个异常,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类而不是调用self方法时,您需要调用A方法并手动传入self.

这不是正常的做事方式 – 你应该有一个非常好的理由这样做.

class A(object):
    def foo(self):
        print A.foo1(self)

    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()
上一篇:扩展Java中静态方法返回的对象


下一篇:如何从JavaScript中的子类调用父类的方法,以便可以访问父的局部变量?