自定义类定义与方法调用错误排查:为何my_class.fun2返回值不符?
问题原因与修复方案
你的代码运行结果不符合预期,核心问题是类内部调用方法时作用域错误:
在my_class.fun2中直接写fun1(x),Python会优先在全局作用域查找fun1,所以实际调用的是全局定义的def fun1(x): return x+2,计算过程变成10+2+33=45,而非你预期的调用类内部的fun1。
修复方法
有两种可行的修正方式:
方式1:明确指定类内部方法
直接通过类名调用自身的fun1,避免作用域混淆:
def fun1(x) : return x + 2 class my_class : def fun1(x) : return x + 22 def fun2(x) : return my_class.fun1(x) + 33 # 明确调用类内部的fun1 print(my_class.fun2(10)) # 输出65
方式2:规范定义实例方法(推荐)
按照Python面向对象规范,实例方法第一个参数应为self,通过self调用类内部方法:
def fun1(x) : return x + 2 class my_class : def fun1(self, x) : # 添加self参数 return x + 22 def fun2(self, x) : # 添加self参数 return self.fun1(x) + 33 # 通过self调用类内部方法 obj = my_class() print(obj.fun2(10)) # 实例化后调用,输出65
补充:原代码的类方法缺少
self/cls参数,属于不规范写法,虽然能运行但容易引发参数混淆,建议采用第二种方式编写。
内容的提问来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

