如何访问 python 数据类中默认参数中的另一个参数?

Iva*_*van 5 python python-3.7 python-dataclasses

我试图导出id_from的默认值name,反之亦然。

@dataclass
class Item:
    id_ = NAME_TO_ID[name]
    name = ID_TO_NAME[id_]
Run Code Online (Sandbox Code Playgroud)

我应该能够像这样调用该类:

Item(id_=123)
Item(name='foo')
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我还希望类在提供id_和时引发错误。name

Item(id_=123, name='foo')  # ValueError: id_ and name cannot be provided together
Run Code Online (Sandbox Code Playgroud)

关于我应该如何去做这件事有什么建议吗?

Pat*_*ugh 3

您可以使用编写__post_init__方法来执行这些验证

from dataclasses import dataclass, field

@dataclass
class Item:
    id_: int = field(default=None)
    name: str = field(default=None)
    def __post_init__(self):
        if self.id_ is None and self.name is None:
            raise TypeError("You must provide exactly one of name or id_")
        if self.id_ is not None and self.name is not None:
            raise TypeError("You must provide exactly one of name or id_")
        if self.id_ is not None:
            self.name = id_to_name(self.id_)
        else:
            self.id_ = name_to_id(self.name)
Run Code Online (Sandbox Code Playgroud)