繁体   English   中英

如何调用子 class 而不是父 class 方法的覆盖方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM