У меня есть следующий класс
@dataclass_json
@dataclass
class Input:
sources: List[Sources] =None
Transformations: List[str] =None
, а также:
@dataclass_json
@dataclass
class Source:
type: str =None
label: str =None
path: str = None
и два подкласса:
@dataclass_json
@dataclass
class Csv(Source):
csv_path: str=None
delimiter: str=';'
и
@dataclass_json
@dataclass
class Parquet(Source):
parquet_path: str=None
Имеется теперь словарь:
parquet={type: 'Parquet', label: 'events', path: '/.../test.parquet', parquet_path: '../../result.parquet'}
csv={type: 'Csv', label: 'events', path: '/.../test.csv', csv_path: '../../result.csv', delimiter:','}
input={'sources':[csv, parquet]}
Теперь я хотел бы сделать что-то вроде
Input().from_dict(input)
с выводом:
Input(sources: [Parquet(...), Csv(...)]).
Это на самом деле работает, но возвращает только 3 параметра из источника данных (тип, метка и путь), а не другие указанные c параметры Csv и Parquet (csv_path, delimiter и parquet_path), которые просто учитывая его значение по умолчанию. Это может быть связано с тем, что библиотека dataclass_ json взяла схему класса перед его инициализацией. С другой стороны, я хотел бы по-прежнему использовать dataclass_ json и просто сделать обертку, поскольку она хорошо обрабатывает регистры и ошибки.
Мне нужно такое поведение, поскольку каждый тип источника имеет разные аргументы, которые определяют себя (например, Csv имеет разделители, а Parquet - нет, et c. ...).
Я изо всех сил пытался получить класс Source и найти подклассы в библиотеке dataclass_ json. При этом я столкнулся с
cls.__args__[0]
, который имеет тип 'GenericMeta'. Но, учитывая это, я не смог получить доступ к его подклассам.
Есть ли какая-нибудь работа вокруг?
Кстати, я использую Python 3.6.
Заранее спасибо за вашу помощь.