# y.py
a = 1
_b = 2
__c = 3
class Y:
a = 10
_b = 20
__c = 30
>>> import y
>>> y.a
1
>>> y._b
2
>>> y.__c
3
このあたりは普通にアクセスできる
>>> yi = y.Y()
>>> yi.a
10
>>> yi._b
20
>>> yi.__c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Y' object has no attribute '__c'
クラスのプロパティにすると __ から始まるのは見えない
プロパティ一覧をみると
>>> dir(yi)
['_Y__c', '__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__', '_b', 'a']
>>> yi._Y__c
30
_Y__c というそれらしい名前があるのでアクセスすると __c のデータにアクセスできた
__ から始めるとそのままアクセスできないように名前が変更されるみたい
名前変わるだけでアクセス権という概念はないから名前わかればアクセスできる