如何使用数据类生成字段值?
How to use dataclasses to generate a field value?
我有以下 class:
class WordItem:
def __init__(self, phrase: str, word_type: WORD_TYPE):
self.id = f'{phrase}_{word_type.name.lower()}'
self.phrase = phrase
self.word_type = word_type
@classmethod
def from_payload(cls, payload: Dict[str, Any]) -> 'WordItem':
return cls(**payload)
如何将此 class 重写为 dataclass?
具体来说,id
字段应该如何声明?它有一个生成的值,而不是代码创建实例将提供的字段。
只需将您的每个属性移动到 class 上的类型注释声明,其中 class 已用 @dataclasses.dataclass
decorator 修饰。
您可以在 __post_init__
method; make sure you mark it as exempt from the __init__
arguments with a dataclass.field()
object:
中生成 id
的值
from dataclasses import dataclass, field
@dataclass
class WordItem:
id: str = field(init=False)
phrase: str
word_type: WORD_TYPE
def __post_init__(self):
self.id = f'{self.phrase}_{self.word_type.name.lower()}'
演示:
>>> from types import SimpleNamespace
>>> wt = SimpleNamespace(name='Python')
>>> WordItem('await', wt)
WordItem(id='await_python', phrase='await', word_type=namespace(name='Python'))
我有以下 class:
class WordItem:
def __init__(self, phrase: str, word_type: WORD_TYPE):
self.id = f'{phrase}_{word_type.name.lower()}'
self.phrase = phrase
self.word_type = word_type
@classmethod
def from_payload(cls, payload: Dict[str, Any]) -> 'WordItem':
return cls(**payload)
如何将此 class 重写为 dataclass?
具体来说,id
字段应该如何声明?它有一个生成的值,而不是代码创建实例将提供的字段。
只需将您的每个属性移动到 class 上的类型注释声明,其中 class 已用 @dataclasses.dataclass
decorator 修饰。
您可以在 __post_init__
method; make sure you mark it as exempt from the __init__
arguments with a dataclass.field()
object:
id
的值
from dataclasses import dataclass, field
@dataclass
class WordItem:
id: str = field(init=False)
phrase: str
word_type: WORD_TYPE
def __post_init__(self):
self.id = f'{self.phrase}_{self.word_type.name.lower()}'
演示:
>>> from types import SimpleNamespace
>>> wt = SimpleNamespace(name='Python')
>>> WordItem('await', wt)
WordItem(id='await_python', phrase='await', word_type=namespace(name='Python'))