假设我有以下简单的类对象
class TEST:
def __init__(self, project = 'ABC', scenarios = {'A': [1,2,3], 'B': [4,5,6]}):
self.project = project
self.scenarios = scenarios
P = TEST(project = 'ABC', scenarios = {'A': [1,2,3], 'B': [4,5,6]})
print(P.scenarios)
{'A': [1, 2, 3], 'B': [4, 5, 6]}
我想要什么:使用上面的示例,我希望能够指定:
P = TEST(project = 'ABC', scenarios = {'A': [1,2,3], 'B': [4,5,6], 'C': [7,8,9]})
并能够返回以下输出
In [2]:P.A
Out[2]: [1, 2, 3]
In [3]:P.B
Out[4]: [4, 5, 6]
In [3]:P.C
Out[4]: [7, 8, 9]
也就是说,我想自动添加字典键作为属性并让它们返回字典的值。
我尝试过的:这类似于 Pandas DataFrame 自动添加列名作为属性并返回系列的方式。我尝试梳理后端代码,但没有成功。
This SO question很有帮助,但我无法使用它,因为我无法找到将其添加为属性的方法(例如 self.+scenario.keys() 等)
最佳答案
您可以使用 scenarios
更新实例的 __dict__
:
class TEST:
def __init__(self, project='ABC', scenarios=None):
self.project = project
self.scenarios = scenarios or {'A': [1, 2, 3], 'B': [4, 5, 6]}
self.__dict__.update(self.scenarios)
>>> P = TEST(project='ABC', scenarios={'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
>>> P.A
[1, 2, 3]
>>> P.B
[4, 5, 6]
>>> P.C
[7, 8, 9]
顺便说一句,这可能不是你真正的代码,但是 avoid mutable default arguments除非你确定自己在做什么。
关于python - 类对象 : adding attributes to class based on an input list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58066361/