在python中命名mangling

时间:2016-02-25 05:37:00

标签: python python-2.7

考虑以下计划。

 class A():
     class __B():
         def __c(self):
             pass
a = A()
dir(a)
['_A__B', '__doc__', '__module__']
dir(a._A__B)
['_B__c', '__doc__', '__module__']

 ^^^^^^^

为什么这不是___B__c为什么没有3 _ s。这里的逻辑是什么? 根据名称修改,它应该是_classclass这里是__B。那么2 __ s

的位置

1 个答案:

答案 0 :(得分:4)

它正好在the docs(强调添加):

  

表单__spam的任何标识符(至少两个前导下划线,最多一个尾随下划线)在文本上替换为_classname__spam,其中classname是当前类名,带有前导下划线 < / p>