当派生类重载i时调用基类方法

2024-04-25 02:19:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下资料:

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中的原始A.x时,如何引用它?


Tags: self内容helloobjectdefclassbyeprint
2条回答

像这样:

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

你想要“超级”功能:

super(Abis, self).x ()

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

相关问题 更多 >