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
相关产品推荐
相关产品推荐

