python - 在数据类中解包 kwargs
问题描述
我可以kwargs
在创建数据类对象时使用而不会出现问题:
@dataclass()
class Data:
name: str = 'Unnamed'
additional: int = None
things: int = None
dic = {'additional': 123, 'things': 456}
res = Data(name='Somename', **dic)
Output: Data(name='Somename', additional=123, things=456)
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')
解决方案
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)
推荐阅读
- python - 根据索引和值列表过滤元组列表的最快方法是什么?
- codeigniter - Codeigniter Compoer 自动加载但没有 Composer.json 文件
- python - SqlAlchemy 中的 order_by Levenshtein 距离
- ios - 混合应用程序中的渐进式 Web 应用程序(PWA):存储关系离线数据
- java - 根据多个“可选”条件过滤 HashMap
- java - 如何计算不同的无线电组?
- python - 错误图像 C:\Windows\system32\xxx.dll 不是为在 Windows 上运行而设计的,或者它包含通过 Selenium 使用 ChromeDriver 和 Chrome 的错误
- matrix - LAPACK dorgqr 例程的内存要求
- python - 如何在多对多关系中添加数据库约束
- mysql - mysql JSON_ARRAYAGG 或 GROUP_CONCAT 有限制