相关疑难解决方法(0)

具有可变和不可变属性的数据类样式对象?

我一直在尝试使用文件中的属性名称动态加载的数据类,但无法找到创建“冻结”和“非冻结”属性的方法。我相信数据类只允许您将所有属性设置为冻结或非冻结。

截至目前,我创建了一个冻结数据类,并添加了一个可变类作为我可以随时更改的属性之一,但我对这种方法的可读性不太满意。

人们是否会推荐另一个Pythonic数据类,而不需要实现一个能够设置可变/不可变属性的类?

import dataclasses

class ModifiableConfig:
    """There is stuff in here but you get the picture."""
    ...

config_dataclass = dataclasses.make_dataclass(
    'c',
    [(x, type(x), v) for x, v in config.items()] + [('var', object, ModifiableConfig())],
    frozen=True
)
Run Code Online (Sandbox Code Playgroud)

不过,我更喜欢能够选择哪些属性被冻结,哪些属性不被冻结。不再需要向数据类添加额外的类。它可能看起来像这样:

config_dataclass_modifiable = dataclasses.make_dataclass(
            'c', [(x, type(x), v, True if 'modifiable' in x else False) for x, v in config.items()])
Run Code Online (Sandbox Code Playgroud)

请注意“如果 x else False 中‘可修改’则为 True”,我并不是说这就是我最终会做的事情,但希望这有助于更好地理解我的问题。

python mutable immutability python-3.7 python-dataclasses

7
推荐指数
1
解决办法
6633
查看次数