Python中判断参数是否为指定类实例的代码调试求助
解决你的Python函数返回None的问题
我来帮你梳理代码里的问题,一步步搞定它:
首先,原代码的核心问题有三个:
- 变量作用域错误:函数里直接给
var1赋值时,Python会默认它是局部变量,但你实际想修改的是全局的var1,没加global声明的话,要么修改的是局部变量(不影响全局),要么会因为局部变量未定义报错。 - 实例判断的语法错误:你用注释替代了判断逻辑,而且正确的实例判断应该用
isinstance(),不是==。 - 类定义不完整:
class x():后面没有内容,需要加pass补全,否则会触发语法报错。
修正后的代码(针对全局变量var1的情况)
class x(): pass # 补全类的空定义 var1 = 1 var2 = x() def function(parameter): global var1 # 声明要操作全局变量var1 if isinstance(parameter, x): # 正确判断参数是否为x类的实例 var1 = 2 return var1 print(function(var2)) # 现在会输出2
如果你原本想让var1是类x的属性(而非全局变量)
如果你的需求是修改实例的属性,代码可以改成这样:
class x(): var1 = 1 # 将var1定义为类的属性 var2 = x() def function(parameter): if isinstance(parameter, x): parameter.var1 = 2 # 修改当前实例的var1属性 # 如果你想修改所有实例共享的类属性,就写成 x.var1 = 2 return parameter.var1 print(function(var2)) # 输出2
为什么原代码输出None?
原代码里的if parameter == #object of x:这行相当于没有判断逻辑,var1=2根本不会执行。同时函数里没有声明global var1,Python会认为var1是局部变量,但你没给它赋值就直接return,理论上应该报UnboundLocalError,可能你实际运行的代码有细微差异,但核心问题还是上面提到的作用域和判断逻辑的错误。
内容的提问来源于stack exchange,提问作者Canyon
相关产品推荐
相关产品推荐

