python 删除父类方法_如何在python中重写父类的函数?

让我们看看最简单的例子:from dis import dis

class A(object):

def __pick(self):

print "1"

def doitinA(self):

self.__pick()

class B(A):

def __pick(self):

print "2"

def doitinB(self):

self.__pick()

b = B()

b.doitinA() # prints 1

b.doitinB() # prints 2

dis(A.doitinA)

print

dis(B.doitinB)

拆卸步骤如下:8 0 LOAD_FAST 0 (self)

3 LOAD_ATTR 0 (_A__pick)

6 CALL_FUNCTION 0

9 POP_TOP

10 LOAD_CONST 0 (None)

13 RETURN_VALUE

15 0 LOAD_FAST 0 (self)

3 LOAD_ATTR 0 (_B__pick)

6 CALL_FUNCTION 0

9 POP_TOP

10 LOAD_CONST 0 (None)

13 RETURN_VALUE

如您所见,Python会篡改以两个下划线开头的函数名(并访问这些名称!!)包含类名的名称-在本例中是_A__pick和_B__pick)。这意味着定义函数的类决定调用哪个__pick方法。

解决方案很简单,通过删除双下划线来避免伪私有方法。例如,使用_pick,而不是__pick。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值