pet*_*ush 3 python python-3.7 python-dataclasses
我有以下课程:
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)
Run Code Online (Sandbox Code Playgroud)
如何将此类重写为数据类?
具体来说,如何id宣布该领域?它具有生成的值,而不是代码创建实例将提供的字段.
只需将每个属性移动到类上带有类型注释的声明,其中类已经使用@dataclasses.dataclass装饰器进行了装饰.
您可以id在__post_init__方法中生成值; 确保__init__使用dataclass.field()对象将其标记为免除参数:
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()}'
Run Code Online (Sandbox Code Playgroud)
演示:
>>> from types import SimpleNamespace
>>> wt = SimpleNamespace(name='Python')
>>> WordItem('await', wt)
WordItem(id='await_python', phrase='await', word_type=namespace(name='Python'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |