В настоящее время я использовал 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
Ниже приведен код, используемый классом данных 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
Но, используя класс данных, не могу найти способ его реализовать.
Есть ли здесь решение?
Спасибо.
ИЗМЕНИТЬ
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
Причина использования звездочки в классе данных та же.
Я должен передать тип dictinary классу init.
Любая идея здесь?
init=False
декоратору класса данных и реализуйте__init__
вручную. Вид поражения цели, и без явного определения атрибутов ваш класс данных не будет использовать эти переменные. По сути, вам не нужен класс данных. - person juanpa.arrivillaga   schedule 11.03.2019__init__
вручную, использованиеdataclass
не даст никаких преимуществ. Это единственный способ? - person Hide   schedule 11.03.2019**kwargs
, т.е. передавать дикт - person juanpa.arrivillaga   schedule 11.03.2019