如何通过for循环使这段代码?

时间:2018-08-15 17:15:08

标签: python-3.x

所以,我主要是通过使用for循环来使此代码以更简洁的方式工作,但这样做确实很困难。我还无法创建一个将字典的每个值分配给对应变量的循环,因此可以在类中使用它。对于上下文,字典包含从另一个类获得的值,我只需将其放入dict中并将其发送给此类,因此无需再次计算。

    def get_ipr_data(self):
        self.reservoir_result_dict = ReservoirDataFrame.reservoir_result_dict
        self.pb = self.reservoir_result_dict.get("pb")
        self.rs = self.reservoir_result_dict.get("rs")
        self.bo = self.reservoir_result_dict.get("bo")
        self.uo = self.reservoir_result_dict.get("uo")
        self.re = self.reservoir_result_dict.get("re")
        self.j_index = self.reservoir_result_dict.get("j_index")
        self.q_max = self.reservoir_result_dict.get("q_max")
        self.pws = self.reservoir_result_dict.get("pws")
        self.qb = self.reservoir_result_dict.get("qb")

2 个答案:

答案 0 :(得分:0)

您可以使用setattr函数

for name in ["pb", "rs", "bo", "uo", "re", "j_index", "q_max", "pws", "qb"]:
    setattr(self, name, self.reservoir_result_dict.get(name))

setattr的文档: https://docs.python.org/3/library/functions.html#setattr

答案 1 :(得分:0)

通过定义__getattr__方法来完成属性的委派。您应该只存储字典,然后定义__getattr__

class Foo:
    ...

    def get_ipr_data(self):
        self.reservoir_result_dict = ReservoirDataFrame.reservoir_result_dict

    def __getattr__(self, item):
        return self.reservoir_result_dict[item]