目前我使用的 DTO(数据传输对象)如下所示。
class Test1:
def __init__(self,
user_id: int = None,
body: str = None):
self.user_id = user_id
self.body = body
示例代码非常简单,但当对象规模变大时,我必须定义每个变量。
在深入研究时,发现Python 3.7支持dataclass
。
以下代码是使用dataclass
的DTO。
from dataclasses import dataclass
@dataclass
class Test2:
user_id: int
body: str
在这种情况下,我如何允许传递更多未定义的参数到Test2中?如果我使用Test1,那很容易。只需在__init__中添加**kwargs(星号)即可。
class Test1:
def __init__(self,
user_id: int = None,
body: str = None,
**kwargs):
self.user_id = user_id
self.body = body
使用 dataclass,但找不到任何实现它的方法。
这里有什么解决方案吗?
谢谢。
编辑
class Test1:
def __init__(self,
user_id: str = None,
body: str = None):
self.user_id = user_id
self.body = body
if __name__ == '__main__':
temp = {'user_id': 'hide', 'body': 'body test'}
t1 = Test1(**temp)
print(t1.__dict__)
结果: {'user_id': 'hide', 'body': 'body test'}
正如您所知,我想使用字典类型**temp
来插入数据。
在数据类中使用星号的原因相同。
我必须将字典类型传递给类 init。
有什么想法吗?
init=False
传递给数据类装饰器,并手动实现__init__
。这有点违背了初衷,如果不显式定义属性,您的数据类就不会使用这些变量。本质上,您不需要一个数据类。 - juanpa.arrivillaga__init__
,那么使用dataclass
就没有优势了吗?这是唯一的方法吗? - Hide**kwargs
来实现这一点,即传递一个字典。 - juanpa.arrivillagadefault_factory
。 - Chris