Python名称修饰(mangling)机制困惑:属性赋值报错疑问
问题原因解析
这是Python的**名称修饰(Name Mangling)**机制在起作用:
- 当你在
Atm类里定义__balance这种双下划线开头的变量时,Python会自动把它重命名为_Atm__balance,这才是类内部实际使用的变量。 - 执行
bank.__balance = "abcdefg"时,你只是给bank实例新增了一个完全独立的属性,和类内部真正的_Atm__balance毫无关联。类里的方法根本不会用到这个新增的__balance,所以不会触发运算错误,自然能正常运行。 - 而
bank._Atm__balance = "wgwwg"是直接修改了类内部实际使用的那个变量。如果Atm类里的方法有对这个变量做整数加法的逻辑(比如存款时self.__balance += 金额),现在变量变成了字符串,整数和字符串相加自然会抛出类型错误。
内容的提问来源于stack exchange,提问作者zawrabh
相关产品推荐
相关产品推荐

