python - 类对象 : adding attributes to class based on an input list

标签 python python-3.x class

假设我有以下简单的类对象

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/

相关文章:

C# 数组值以恒定模式翻转

python - 绘制灰度图像的直方图

python - 无需互联网访问即可在 python 中使用 Docker 组合

python - 使用 python 2.7.13 请求的 ssl 连接

python - 为什么我不能在 Python 上单击并拖动圆圈?

c++ - 在 C++ 中删除其类的实例后,是否释放了分配给 cpp 中定义的全局静态变量的内存?

python - 如何仅记录数据框中的非零值并将 O 替换为 NA?

python - 如何将字典转换为 Python 中的字典列表?

python - 打印每个单词的第一个和最后一个字母的代码

C++链式继承