具有Iterable字段的冻结和散列数据类

2024-06-28 15:43:21 发布

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

{2}我终于放弃了对Python的支持。在

假设我有一个冻结的散列类MyClass,其中一个字段my_field,类型为tuple。在

多亏了attrs转换器,我能够提供一个灵活的API,客户机能够用各种类型的my_field实例化,比如listset或{}。它们将在类创建之前自动转换为tuple。在

我可以用dataclasses保存这个API吗?在

根据要求,一个小代码示例:

@attr.s(frozen=True, hash=True)
class MyClass:
    my_field = attr.ib(default=tuple(), converter=tuple)


print(MyClass([1, 2, 3]))

Tags: 实例apitrue类型field客户机mymyclass
2条回答

不,转换器是数据类PEP选择不实现的一个简单的东西。http://www.attrs.org/en/stable/why.html#data-classes还提到了一些。在

DCs严格地说是attrs的一个子集,它不太可能改变。在

在post_init步骤中通过基类设置属性值似乎有效:

@dataclass(frozen=True)
class MyClass:
    my_field: Sequence[str]

    def __post_init__(self):
        super().__setattr__('my_field', tuple(getattr(self, 'my_field')))

Mixin实现:

^{pr2}$

相关问题 更多 >