Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加到列表后,类属性超出范围_Python_Oop_Scope - Fatal编程技术网

Python 添加到列表后,类属性超出范围

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 不幸的是,将属性添加到列

我正在构建一个类,通过迭代超参数和检查分数来优化SKLearn的GBoost分类器。我的类具有与分类器使用的每个参数相关的属性,所有这些属性都在
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)):索引到参数列表中似乎也不起作用!