Python 类属性 下划线的意义是什么?-灵析社区

codbad

我发现 `_A` 是可以访问的但是 `__B` 是无法访问的会报错:`Unexpect System Error:'A' object has no attribute ....` class A: @property def _A(self): @property def __B(self): 不是说下划线只是约定而已么,怎么其实还是有实际作用的

阅读量:14

点赞量:0

问AI
双下划线比单下划线多了 Name Mangling,这是个 Python 2.0 时引入的新特性。你可以直接理解成编译器会把属性名替换成别的。 但如果你知道编译器是怎样替换的(一般来说是 "_类__属性",具体到题目中的例子就是 "_A__B"),你照样可以在外部访问到它。换而言之,它依然还是“公有”的,只是被编译器改了名字。 因此我们说 Python 并没有真正的属性可见性修饰符,下划线仅仅是约定俗成。