【发布时间】:2020-02-20 06:19:21
【问题描述】:
我一直在使用从文件中动态加载属性名称的数据类,但我无法找到创建“冻结”和“非冻结”属性的方法。我相信数据类只允许您将所有属性设置为冻结或非冻结。
到目前为止,我创建了一个冻结的数据类并添加了一个可变类作为我可以随时更改的属性之一,但我对这种方法的可读性不太满意。
是否有另一个 Python 数据类人们会推荐,而无需实现能够设置可变/不可变属性的类?
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
)
但是,我希望能够选择冻结哪些属性,哪些不冻结。不再需要向数据类添加额外的类。它可能看起来像这样:
config_dataclass_modifiable = dataclasses.make_dataclass(
'c', [(x, type(x), v, True if 'modifiable' in x else False) for x, v in config.items()])
请注意“True if 'modifiable' in x else False”,我并不是说我最终会这样做,但希望这有助于更好地理解我的问题。
【问题讨论】:
-
IMO 如果您按照您所拥有的内容(可能带有一些示例用法)添加一个您认为不太可读的示例,这将非常有帮助。这将使我们更好地了解您在说什么。
标签: python immutability python-3.7 mutable python-dataclasses