Python对象填充最佳实践:JSON转换逻辑应放__init__内还是外部?
JSON转换逻辑放置方案建议
方案2的设计合理性远高于方案1,符合软件工程的单一职责设计原则,原因如下:
- 解耦业务类和数据源:
League类作为业务实体,只需要关心自身要承载的属性(id、name、country_code),不需要感知上层数据来自哪里,不管是API返回、数据库查询、本地CSV导入都可以通用构造方法创建实例,适配性更强。 - 降低后续维护成本:如果后续API返回结构调整,方案1需要修改
League类的核心初始化逻辑,很容易影响其他使用这个类的业务逻辑;方案2只需要调整外部转换逻辑,不会侵入类的核心实现。 - 更便于单元测试:写单元测试构造
League实例的时候,不需要按照API结构拼嵌套字典,直接传对应参数即可,测试代码更简洁。
只有当你能100%确认
League类永远只会绑定这一个API数据源,不会有其他构造场景的极端情况下,方案1才能考虑使用,其余所有场景都优先选方案2。
如果担心转换逻辑散落在业务代码各处不好维护,可以加一个专用的类方法收拢转换逻辑,同时保留构造方法的通用性:
class League: def __init__(self, id, name, country_code): self.id = id self.name = name self.country_code = country_code @classmethod def from_api_raw(cls, raw_data): return cls( id=raw_data["league"]["id"], name=raw_data["league"]["name"], country_code=raw_data["country"]["code"] ) # 调用方式简洁,转换逻辑集中管理 leagues = [League.from_api_raw(d) for d in data["data"]]
内容的提问来源于stack exchange,提问作者cdesar78
相关产品推荐
相关产品推荐

