派生类重载它时调用基类方法

时间:2013-04-26 14:00:00

标签: python class overloading

我有以下内容:

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.x中的原始A

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

你想要“超级”功能:

super(Abis, self).x ()

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