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

Python构造函数调用成员方法报NameError,求解决方案(Spyder 3.7)

解决构造函数中调用类方法的NameError问题

嘿,我来帮你搞定这个报错!你遇到的NameError: name 'fun' is not defined,核心原因是在类的构造函数__init__里调用方法的方式不对——Python把fun()当成了全局函数去查找,但你的fun明明是myClass的实例方法,得通过当前实例来调用才行。

问题拆解

  • 在__init__里写self.a = fun()时,没有指定调用的是当前类实例的fun方法,Python会默认去全局作用域找这个函数,自然找不到,所以抛出错误。
  • 类的实例方法(比如你的fun)必须通过self.前缀来调用,self在这里代表正在创建的类实例,通过它才能访问到实例绑定的方法。

修正后的代码

class myClass(object):
    def __init__(self):
        self.a = self.fun()  # 加上self.,明确调用当前实例的fun方法
    def fun(self):
        return 10

instance = myClass()
print(instance.a)  # 运行后会输出10,验证成功

额外补充

如果你的fun方法不需要访问任何实例属性(比如这里只是返回固定值10),也可以把它定义成静态方法,用@staticmethod装饰器标记,调用时同样可以用self.fun()或者myClass.fun():

class myClass(object):
    def __init__(self):
        self.a = self.fun()
    @staticmethod
    def fun():
        return 10

instance = myClass()

不过对于你的场景,用实例方法加self.调用是最常规、最稳妥的写法,尤其是如果后续fun需要访问实例的其他属性时,这种写法能直接兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:34:47