我有以下内容:
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
in ?A
我有以下内容:
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
in ?A
像这样:
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