[问题][python 实践] 类内函数名 双下划线开头,触发函数名改写

问题:

 1 class A(object):
 2     def __run(self):
 3         print('A')
 4 
 5     def exec(self):
 6         self.__run()
 7         print(dir(self))
 8 
 9 
10 class B(A):
11     def __run(self):
12         print('B')
13 
14 
15 b = B()
16 b.exec()

为什么输出 'A' 呢?

 

 

原因:

前置双下划线__var:在类环境中使用时会触发名称改写

python解释器将 类A中的 __run 自动修改为了 _A__run,类B中的 __run 自动修改为了 _B__run,

故:执行exec时,实际执行的是 _A__run,输出了 'A'

posted @ 2021-02-22 00:27  JmingS  阅读(74)  评论(0编辑  收藏  举报