2016-02-25 6 views
2

Рассмотрите следующую программу.Название mangling in python

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.What логика здесь? По имени коверкая, он должен быть _class и class здесь __B .so где находятся 2__ s

ответ

4

Это прямо в the docs (курсив):

Любой идентификатор вида __spam (по крайней мере два ведущих подчеркивания, не более одного нижнего подчеркивания) заменяется текстовым именем _classname__spam, где имя класса - это текущее имя класса с лидирующими подчеркиваниями

+0

отлично !!!!!!!!!!!, что очищает вещи !!!!!!!! thanx много :) – vks

+0

Do you know Если есть какая-то особая причина, почему python делает это или ее просто синтаксис языка таким образом – vks

Смежные вопросы