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)
关于我应该如何去做这件事有什么建议吗?
您可以使用编写__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)