Python中Setter方法相关的名字修饰(Name Mangling)问题
为什么双下划线变量会导致Setter条件判断失效?
核心原因是Python的**名称修饰(Name Mangling)**机制:
- 当你在类的方法(比如
__init__)中使用以双下划线__开头的变量(如__name、__employee_id)时,Python会自动对这个变量名进行重命名,格式为_类名__变量名。比如你的类如果叫Employee,__employee_id会被改成_Employee__employee_id,目的是避免子类意外覆盖父类的“私有”属性。 - 而你写的Setter方法,应该是针对不带双下划线的属性(比如
employee_id)进行赋值的。这时候Setter操作的self.employee_id,和__init__里的__employee_id其实是两个完全不同的变量——前者是普通属性,后者是被重命名后的“私有”属性。 - 所以之前的Setter条件判断根本没作用到
__init__初始化的那个变量上,自然不会生效,输出还是初始的<0000>:;去掉双下划线后,__init__里的变量名和Setter操作的属性名一致,都是name和employee_id,Setter的条件判断就能正确修改目标变量,于是输出变成<9999>: Unknown。
内容的提问来源于stack exchange,提问作者netorare
相关产品推荐
相关产品推荐

