Python 类属性 下划线的意义是什么?
我发现 _A
是可以访问的但是 __B
是无法访问的会报错:Unexpect System Error:'A' object has no attribute ....
class A:
@property
def _A(self):
@property
def __B(self):
不是说下划线只是约定而已么,怎么其实还是有实际作用的
回复
1个回答
test
2024-06-25
双下划线比单下划线多了 Name Mangling,这是个 Python 2.0 时引入的新特性。你可以直接理解成编译器会把属性名替换成别的。
但如果你知道编译器是怎样替换的(一般来说是 _类__属性
,具体到题目中的例子就是 _A__B
),你照样可以在外部访问到它。换而言之,它依然还是“公有”的,只是被编译器改了名字。
因此我们说 Python 并没有真正的属性可见性修饰符,下划线仅仅是约定俗成。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容