Python 父类调用子类方法的问题

今天遇到了这样一个问题,通过重载方法来设置不同的字段值,

而这个设置方法对于类外部来说没有什么作用,所以设置成了私有,

结果在调用的时候,始终调用的是父类的方法而不是子类重载的方法,

如下例:

class A():

    def __init__(self):

        print(self.__get_name())



    def __get_name(self):

        return "A"



class B(A):

    def __get_name(self):

        return "B"



if __name__ == "__main__":

    b = B() # 输出为 "A"

上例中初始化时应该调用 B 中的 __get_name 方法,却调用了父类 A 中的 __get_name 方法,

后来才幡然醒悟,私有方法只能在类内部使用,对于父类是不可见的,

当然无法调用,但是我又不想对外开放这样的方法,最后选择了使用 protected 方法,

只对继承链上的类可见。

在 python 中, 双下划线开头的方法 __xxx 为私有方法,只有类内部可见,

单下划线开头的方法 _xxx 相当于其他语言的 protected 方法,

仅继承链上的类中可见。

class A():

    def __init__(self):

        print(self.__get_name())



    def _get_name(self):

        return "A"



class B(A):

    def _get_name(self):

        return "B"



if __name__ == "__main__":

    b = B() # 输出为 "B"

参考链接:

http://www.codeweblog.com/python%E9%87%8C%E7%9A%84%E7%B1%BBprivate-protected%E6%88%90%E5%91%98%E5%B1%9E%E6%80%A7/

http://www.cnblogs.com/wanpython/archive/2013/05/23/3095534.html

转载于:https://my.oschina.net/u/934002/blog/1538231

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值