我想获得__init__
参数的名称,并在代码运行时修改它们。我的班级是这样的:
class Sample:
def __init__ (self,indicators:dict):
self.names = []
self.returns = 0.0
for k,v in indicators.items():
setattr(self, k, v)
self.names.append(k)
该类的输入是从lis中随机选择的项目;然后我将这些随机项分配给一个具有整数值的字典
indicatorsList =["SMA", "WMA", "EMA", "STOCHASTIC", "MACD", "HIGHEST_HIGH",
"HIGHEST_LOW", "HIGHEST_CLOSE", "LOWEST_HIGH", "LOWEST_LOW",
"LOWEST_CLOSE", "ATR", "LINGRES", "RSI", "WRSI", "ROC",
"DAY", "MONTH"]
# initializing the value of n
n = random.randint(2,int(math.ceil(len(indicatorsList)/2)))
randomIndList = n * [None]
for i in range(n):
choice = random.choice(indicatorsList)
randomIndList[i] = choice
...
...
sample = Sample(randDict)
问题是,我不知道__init__
中这些参数的名称,我需要在以后修改它们,例如:
sample.sma = random.randint(0, maxVal)
但是我不知道这个对象是否会有sma
,或者ema
,或者任何其他属性,因为它们是随机分配的
首先,此代码:
将工作,即使
sample
没有sma
属性。它将创建一个。你自己试试看但是,正如您在注释中指定的那样,您只想修改已经存在的属性,这在这种情况下没有帮助
使用现有的类定义,可以做的是在已经定义的
names
属性上循环然而,您基本上已经在这里重新创建了一个字典,那么为什么不重新定义类以直接使用字典呢
现在您不再需要动态
setattr
或getattr
查找。它们只是键和值:(这也意味着不需要单独的
names
属性。)相关问题 更多 >
编程相关推荐