从列表中设置Python属性,但在lis之外调用它们

2024-03-29 10:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

不确定这是否是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)

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

希望这更清楚。你知道吗

谢谢

另外,我用的是python3


Tags: 方法self属性fooinitvaluedefmyclass
1条回答
网友
1楼 · 发布于 2024-03-29 10:34:41

我不确定我是否理解这个问题。你在找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

相关问题 更多 >