ナンドクカ
Pythonには、アンダースコア二つ"__"から始まって、アンダースコア二つ"__"で終わらない名前の属性が、難読化される、というよくわからん仕様がある。
自分でコードを書くときに、使ったことはない。
アンダースコア_をひとつだけつけて、プライベートっぽさを示す、ということはするときもある。それで十分なことが多いと思う。それでは不十分な場合は、難読化でも不十分なことが多いだろうし。
仕様としては、以下のような感じ。
>>> class C(object): def __init__(self,name): self.__name = name def getName(self): return self.__name >>> c = C("hoge") >>> c.getName() 'hoge' >>> c._C__name 'hoge' >>> hasattr(c, "__name") False >>> hasattr(c, "_C__name") True >>> class C2(C): def __init__(self, name): super(C2, self).__init__(name) def upper(self): return self.__name.upper() def upper2(self): return self.getName().upper() >>> c2 = C2("hogehoge") >>> c2.upper() AttributeError: 'C2' object has no attribute '_C2__name' >>> c2.upper2() 'HOGEHOGE' >>> class C3(C): def __init__(self, name): self.__name = name def upper(self): return self.__name.upper() def upper2(self): return self.getName().upper() >>> c3 = C3("hogehogehoge") >>> c3.upper() 'HOGEHOGEHOGE' >>> c3.upper2() AttributeError: 'C3' object has no attribute '_C__name' >>> c3._C__name = "xxx" >>> c3.upper2() 'XXX' >>> c3.upper() 'HOGEHOGEHOGE'