Python类实例方法被赋值为字符串后调用异常的相关疑问
代码示例
class Bank_acount: def password(self): return 'code:123'
执行情况
- 调用方法:
denny = Bank_acount() denny.password() # 函数调用 >>> 'code:123'
- 查看方法对象:
denny.password # password是方法名 >>> "bound method Bank_acount.password of <__main__.Bank_acount object at 0x00000167820DDCA0>"
- 赋值操作:
denny.password = 'code:456' # 将password赋值为字符串
- 查看赋值后的结果:
denny.password >>> 'code:456'
- 调用报错:
denny.password() >>> TypeError: 'str' object is not callable
疑问解答
- 对,
denny.password = 'code:456'完全没修改原类Bank_acount中password方法的代码,原方法里的return 'code:123'依然保持原样。这个操作只是给实例denny单独添加了一个同名属性,和类本身的定义无关。
- 对,
- 原类的
password(self)方法没有被销毁。类中的方法仍然存在于类的命名空间里,只是当实例自身有同名属性时,访问denny.password会优先读取实例自己的属性,不再去类中查找方法。你可以新建一个实例验证:比如bob = Bank_acount(),调用bob.password()依然会返回'code:123'。
- 原类的
- 没有生成新函数。你只是把字符串
'code:456'赋值给了实例的password属性,它就是个普通字符串,不具备可调用的函数特性,所以后续调用denny.password()会触发“字符串不可调用”的类型错误。
- 没有生成新函数。你只是把字符串
内容的提问来源于stack exchange,提问作者Denny
相关产品推荐
相关产品推荐

