Docs-> 9.Classes-> 9.6 Private Variables
Следующие строки (строки 3 до 5) имеют для меня нулевой смысл:
Так какесть действительный вариант использования для закрытых членов класса (а именно, чтобы избежать столкновения имен с именами, определенными подклассами), существует ограниченная поддержка такого механизма, называемого искажение имени.Любой идентификатор формы __spam (по крайней мере два начальных подчеркивания, самое большее одно конечное подчеркивание) заменяется в текстовом виде на _classname__spam, где classname - это имя текущего класса с удаленными начальными подчеркиваниями.Это искажение выполняется без учета синтаксической позиции идентификатора, если оно происходит в определении класса.
Если classname является текущим классом, почему он говорит с ведущимподчеркивания раздели ?В тексте все видят, что элемент _classname__spam
имеет перед ним подчеркивание.
EDIT
Каким-то образом должен быть классимена с ведущими символами подчеркивания, такими как __Welcome, но в учебных материалах я всегда приводил примеры вроде:
class NamingNow:
pass
... без подчеркиваний.Однако когда я использую функцию dir
, я получаю что-то вроде
>>> dir(Mapping)
['_Mapping__update', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'update']
Относится ли это правило к этой вещи __class__
?