You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类实例方法被赋值为字符串后调用异常的相关疑问

代码示例

class Bank_acount:
    def password(self):
        return 'code:123'

执行情况

  1. 调用方法:
denny = Bank_acount()
denny.password()            # 函数调用

>>> 'code:123'
  1. 查看方法对象:
denny.password             # password是方法名
 
>>> "bound method Bank_acount.password of <__main__.Bank_acount object at 0x00000167820DDCA0>"
  1. 赋值操作:
denny.password = 'code:456'     # 将password赋值为字符串
  1. 查看赋值后的结果:
denny.password

>>> 'code:456'
  1. 调用报错:
denny.password()

>>> TypeError: 'str' object is not callable

疑问解答

    1. 对,denny.password = 'code:456'完全没修改原类Bank_acount中password方法的代码,原方法里的return 'code:123'依然保持原样。这个操作只是给实例denny单独添加了一个同名属性,和类本身的定义无关。
    1. 原类的password(self)方法没有被销毁。类中的方法仍然存在于类的命名空间里,只是当实例自身有同名属性时,访问denny.password会优先读取实例自己的属性,不再去类中查找方法。你可以新建一个实例验证:比如bob = Bank_acount(),调用bob.password()依然会返回'code:123'。
    1. 没有生成新函数。你只是把字符串'code:456'赋值给了实例的password属性,它就是个普通字符串,不具备可调用的函数特性,所以后续调用denny.password()会触发“字符串不可调用”的类型错误。

内容的提问来源于stack exchange,提问作者Denny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:06:29