有人告诉我,我应该避免在我的代码中使用self.__dict__
,但我无法找到另一种解决方法。我刚刚开始上课,所以不太清楚如何做到这一点。
class variable( object ):
def __init__( self, json_fn, *args, **kwargs ):
self.metrics = self.getmetrics(json_fn)
for metric in self.metrics :
self.__dict__[metric] = self.get_metric_dataframes(metric)
def get_metric_dataframes( self , metric_name ):
'''extract and return the dataframe for a metric'''
因此,我的对象“变量”具有存储在json中的不同度量的不同数据帧。我希望能够执行variable.temperature,variable.pressure,variable.whatever而无需编写:
self.temperature = self.get_metric_dataframes(temperature)
self.pressure = self.get_metric_dataframes(pressure)
self.whatever = self.get_metric_dataframes(whatever)
由于所有数据帧都使用相同的函数提取,并将度量作为参数。这就是我循环使用指标并使用
的原因 self.__dict__[metric] = self.get_metric_dataframes(metric)
所以知道我永远不会更新任何这些数据帧(我在代码中使用它们的副本但不想更新对象的值)。
还有其他解决方案吗?
我可以做的另一种方法是构建一个字典,其中所有指标都作为关键字和数据框作为值并存储在self.metric
中,然后我可以用object.metric['temperature']
调用它但我宁愿立刻做object.temperature
,我很想知道是否可以做到。
感谢您的帮助!
答案 0 :(得分:3)
如果每个UITypeEditor
都是字符串,则可以使用setattr
代替对实例字典的直接访问:
metric
答案 1 :(得分:1)
有几种解决方案:
__getattr__
,但您可能遇到困难(实施可能非常重要)最后,您使用__dict__
的解决方案非常好。您也可以使用getattr
/ setattr
。
另一种解决方案是将您的指标存储在您自己的词典中:
self.metric_dict = {metric: self.get_metric_dataframes(metric) for metric in metrics}
然后定义属性以访问此字典,如属性
@property
def temperature(self):
return self.metric_dict["temperature"]
等等......