Python 类属性 下划线的意义是什么?

作者站长头像
站长
· 阅读数 4

我发现 _A 是可以访问的但是 __B 是无法访问的会报错:Unexpect System Error:'A' object has no attribute ....

class A:

    @property
    def _A(self):

    @property
    def __B(self):
 

不是说下划线只是约定而已么,怎么其实还是有实际作用的

回复
1个回答
avatar
test
2024-06-25

双下划线比单下划线多了 Name Mangling,这是个 Python 2.0 时引入的新特性。你可以直接理解成编译器会把属性名替换成别的。

但如果你知道编译器是怎样替换的(一般来说是 _类__属性,具体到题目中的例子就是 _A__B),你照样可以在外部访问到它。换而言之,它依然还是“公有”的,只是被编译器改了名字。

因此我们说 Python 并没有真正的属性可见性修饰符,下划线仅仅是约定俗成。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容