【发布时间】:2020-08-03 23:28:47
【问题描述】:
我有以下课程
@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:','}
现在我想做类似的事情
Source().from_dict(csv)
并且输出将是类 Csv 或 Parquet。我知道,如果您启动类源,您只需使用“from dict”方法“上传”参数,但是是否有可能通过某种类型的继承来执行此操作而不使用“构造函数”,这会产生 if-else if -else 所有可能的“类型”?
Pureconfig 是一个 Scala 库,当属性 'type' 具有所需子类的名称时,它会创建不同的案例类。在 Python 中这是可能的吗?
【问题讨论】:
-
到目前为止你尝试过什么?为什么不想使用 if-else?是否需要支持其他类型?
type字段是否始终是目标类的名称,或者它们可以不同吗? -
不一定是重复的,而是同一问题的更通用版本:stackoverflow.com/questions/7273568/…
-
你的类被标记了第三方装饰器
dataclass_json,但是你的使用示例没有使用它的功能。您是否需要适用于任何dataclass的解决方案(从 dict 加载)还是您确实需要 JSON 功能(从 JSON 加载)?
标签: python json inheritance subclass python-dataclasses