В настоящее время я использовал DTO (Data Transfer Object) следующим образом.
class Test1:
def __init__(self,
user_id: int = None,
body: str = None):
self.user_id = user_id
self.body = body
Пример кода очень маленький, но когда масштаб объекта растет, я должен определить каждую переменную.
Пока копаясь в нем, обнаружил, что Python 3.7 поддерживает dataclass
Ниже кода используется класс данных DTO.
from dataclasses import dataclass
@dataclass
class Test2:
user_id: int
body: str
В этом случае, как я могу разрешить передать больше аргументов, которые не определены в class Test2
?
Если бы я использовал Test1
, это легко. Просто добавьте **kwargs(asterisk)
в __init__
class Test1:
def __init__(self,
user_id: int = None,
body: str = None,
**kwargs):
self.user_id = user_id
self.body = body
Но используя dataclass, я не нашел способа реализовать его.
Есть ли здесь какое-нибудь решение?
Спасибо.
EDIT
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.
Есть идеи?