2

我有以下内容:

class A(object):
    def x(self): print "Hello"
    def y(self): self.x()

class Abis(A):
    def x(self): print "Bye"

a = Abis()
a.x()
a.y()

哪个打印:

Bye
Bye

但我实际上想要:

Bye
Hello

既然我想A.y叫“原版” A.x。当派生类重载时,如何引用原始A.xin ?A

4

2 回答 2

5

像这样:

class A(object):
    def x(self): print "Hello"
    def y(self): A.x(self)

...虽然这有点奇怪。x如果您不想在这种情况下调用它,为什么要(或为什么有人)覆盖?

如果您不希望它被覆盖,请给它一个双下划线前缀:

class A(object):
    def __x(self): print "Hello"
    def y(self): self.__x()

在派生类中定义的任何人都__x将获得自己的唯一性__x,不会覆盖您的 - 请参阅Private Variables and Class-local References

于 2013-04-26T14:03:50.603 回答
5

你想要“超级”功能:

super(Abis, self).x ()

这将在基类上调用“x”。请参阅:docs.python.org/2/library/functions.html#super

于 2013-04-26T14:07:22.690 回答