编程语言
首页 > 编程语言> > python – 调用重写方法,超类调用重写方法

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()

标签:superclass,python,inheritance
来源: https://codeday.me/bug/20191007/1867088.html