我有以下课程
@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=';'
and
@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(...)]).
这实际上是有效的,但它只返回来自数据类 Source 的 3 个参数的值(类型、标签和路径),而不是 Csv 和 Parquet 的其他特定参数(csv_path、delimiter 和 parquet_path),这些参数只是给出了默认值。这可能是由于库 dataclass_json 在初始化类之前获取了类的架构。另一方面,我想仍然使用 dataclass_json 并只制作一个包装器,因为它具有良好的大小写和错误处理能力。
我想要这种行为,因为每个源类型都有不同的参数来定义自己(例如 Csv 有分隔符,但 Parquet 没有,等等......)。
我努力尝试获取类 Source 并在库 dataclass_json 中找到子类。这样做,我遇到了
cls.__args__[0]
其类型为“GenericMeta”。但鉴于此,我无法访问其子类。
有什么解决办法吗?
顺便说一句,我正在使用 Python 3.6。
在此先感谢您的帮助。