mis*_*oop 2 python python-dataclasses
kwargs我可以在创建数据类对象时使用,没有问题:
@dataclass()
class Data:
name: str = 'Unnamed'
additional: int = None
things: int = None
dic = {'additional': 123, 'things': 456}
res = Data(name='Somename', **dic)
Run Code Online (Sandbox Code Playgroud)
Output: Data(name='Somename', additional=123, things=456)
Run Code Online (Sandbox Code Playgroud)
kwargs但是,当数据类不属于调用参数时,我想将其解包:
@dataclass()
class Data:
name: str = 'Unnamed'
additional: int = None
things: int = None
def __post_init__(self):
self(**dic) #unpack kwargs to fields
dic = {'additional': 123, 'things': 456}
res = Data(name='Somename')
Run Code Online (Sandbox Code Playgroud)
Adataclass可以显式定义__init__()方法。
文档指出:
参数为
dataclass():
init:如果为 true(默认值),__init__()将生成一个方法。如果该类已定义
__init__(),则忽略此参数。
因此,您可以定义一个标准__init__()方法来处理kwargs.
@dataclass()
class Data:
name: str
additional: int
things: int
def __init__(self, name: str = 'Unnamed', additional: int = None, things: int = None, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
Run Code Online (Sandbox Code Playgroud)