问答 / 0 / 3 / 创建于 4年前
为什么dir(), dict_私有方法和属性可以直接访问?
默认惯例 双下划线默认是一些类对象方法,单下划线私有方法。 python的私有只是个语法糖,告诉你不要直接访问修改。
另外好像只有两个下划线的可以有办法外部访问,odj._Class__方法(), 一个下划线的我没有找到访问方法? odj._Class_方法()也访问不了呀
由于存在类专用成员的有效用例(即避免名称与子类定义的名称发生名称冲突),因此对这种称为名称修改的机制的支持有限。形式上的任何标识符 __spam(至少两个前导下划线,至多一个尾随下划线)在文本上均被替换为_classname__spam,其中classname,当前类名已去除前导下划线。只要不存在标识符的语法位置,就可以进行这种改写,只要它出现在类的定义内即可。
__spam
_classname__spam
classname
__dir__, __dict__ 都有兩个尾随下划线, 不符合以上要求
__dir__
__dict__
>>> class MyClass(): def __hello__(self): print('__hello') def __hello(self): print('__hello') def _hello(self): print('_hello') >>> a = MyClass() >>> a.__hello__() __hello >>> a._MyClass__hello() __hello >>> a._hello() _hello
Private Variables
我要举报该,理由是:
默认惯例 双下划线默认是一些类对象方法,单下划线私有方法。 python的私有只是个语法糖,告诉你不要直接访问修改。
另外好像只有两个下划线的可以有办法外部访问,odj._Class__方法(),
一个下划线的我没有找到访问方法? odj._Class_方法()也访问不了呀
__dir__
,__dict__
都有兩个尾随下划线, 不符合以上要求