Python 添加到列表后,类属性超出范围
我正在构建一个类,通过迭代超参数和检查分数来优化SKLearn的GBoost分类器。我的类具有与分类器使用的每个参数相关的属性,所有这些属性都在Python 添加到列表后,类属性超出范围,python,oop,scope,Python,Oop,Scope,我正在构建一个类,通过迭代超参数和检查分数来优化SKLearn的GBoost分类器。我的类具有与分类器使用的每个参数相关的属性,所有这些属性都在self.\uuuu init\uuuu中定义。更改参数的方法将其存储在列表中,然后在列表上循环,如下所示: param_list = [self.param1, self.param2] for param in param_list: param += 1 #adjust param and check score 不幸的是,将属性添加到列
self.\uuuu init\uuuu
中定义。更改参数的方法将其存储在列表中,然后在列表上循环,如下所示:
param_list = [self.param1, self.param2]
for param in param_list:
param += 1 #adjust param and check score
不幸的是,将属性添加到列表会使它们超出范围,或者由于其他原因,它们不会被更新。感谢chepner和ekhumoro提供的完美解决方案:
param_list = ['param1', 'param2']
for param in param_list:
setattr(self, param, getattr(self, param) + 1)
通过使用setattr,class属性是changes而不是局部变量。它们“运行不正常”是什么意思。请提供一个。您似乎正在尝试修改不可变值。
self.param1+=1
将起作用,因为它转换为类似于setattr(self'param',self.param+1)
param+=1
相当于param=param+1
,它对self.param1
本身没有任何影响。对于p in('param1',param2'):setattr(self,p,getattr(self,p)+1)
。使用(对于范围内的i(len(param_list)):索引到参数列表中似乎也不起作用!