-1

不确定这是否是推荐的在 Python 中做事的方式。我有一个有一堆属性的类,就像这样

class MyClass:
    def __init__(self):
        self.attr1 = "first_value"
        self.attr2 = "second_value"
        ...

但是,这很乏味,我希望能够循环执行此操作:

self.attr_list = ["attr1", "attr2", "another_attr",...]

def __init__(self, values_list):
    self.attr_values = [some_func(i) for i in values_list]

但我后来也想这样称呼这些值:

foo = MyClass(values_list)
...

bar = foo.attr1

myFunc(foo.another_attr, ..., some_other_parameters)

所以问题是,我如何避免繁琐的第一种方法,其中每个属性的行都是硬编码的,但仍然可以方便地引用属性而不必知道/记住它在列表中的位置?

希望这更清楚。

谢谢

PS我正在使用Python 3

4

1 回答 1

0

我不确定我是否理解这个问题。您在寻找setattr吗?像这样的东西:

def assign(self, attr_names, value_list):
    for i in range(len(attr_names)):
        setattr(self, attr_names[i], some_func(value_list[i]))

你可以这样使用它:

foo.assign(["attr1", "attr2"], value_list)    
print(foo.attr1)

我不认为使用setattr本身是错误的,但是我建议使用字典,因为您可能会意外覆盖其他属性,例如考虑一下:

foo.assign(["assign"], [1])
foo.assign(["assign"], [1])  # <-- exception now
于 2014-04-11T13:08:28.850 回答