[英]How do I call the overwritten method of the child class instead of the parent class method?
所以我有父 class 父:
class Parent:
def master(self):
self.__slave()
def __slave(self):
print('No!')
和子 class 子:
class Child(Parent):
def __slave(self):
print('Yay!')
但是每当我调用 child.master() 时,它都会使用 Parent 的 __slave。 如果我从 Child 调用它,有什么办法可以让它使用 Child 的覆盖方法? 因为使用此代码,我只能得到“不”。
不要对要覆盖的方法使用双下划线 ( __
),因为它确实为不与子类冲突而专门命名了 mangling。
从文档中:
__spam 形式的任何标识符(至少两个前导下划线,最多一个尾随下划线)在文本上替换为 _classname__spam,其中 classname 是当前 class 名称,前导下划线被剥离。 只要它出现在 class 的定义中,就可以在不考虑标识符的语法 position 的情况下完成这种修改。
名称修饰有助于让子类覆盖方法而不破坏类内方法调用。 例如:
使用单个下划线,即_slave
解决您的问题,同时仍向用户表明这是一个“私有”API,他们应该避免接触。
这是由于在方法名前使用了双下划线。 python 解释器看不到子 class 方法,因为它是私有的。
class Parent:
def master(self):
self._slave()
def _slave(self):
print('No!')
class Child(Parent):
def _slave(self):
print('Yay!')
Child().master()
尝试这个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.