You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用父类jsonFromDict方法时避免重复传递子类类名?

优化方案:使用类方法替代静态方法

把父类中的jsonFromDict从静态方法改成类方法(@classmethod装饰器),类方法会自动将调用它的子类作为第一个参数(cls)传入,这样就不需要手动传递类名参数了,完美符合DRY原则,且无需在子类中重写方法。

原代码实现

class Utils:
    @staticmethod
    def jsonFromDict(className, dict_data):
        # 示例:基于字典创建类实例的逻辑
        return className(**dict_data)

class payloadA(Utils):
    def __init__(self, name, value):
        self.name = name
        self.value = value

# 原调用方式:需重复传递子类类名
data = {"name": "demo", "value": 456}
obj = payloadA.jsonFromDict(payloadA, data)

修改后的代码实现

class Utils:
    @classmethod
    def jsonFromDict(cls, dict_data):
        # 用cls替代原有的className参数,自动获取调用方的类
        return cls(**dict_data)

class payloadA(Utils):
    def __init__(self, name, value):
        self.name = name
        self.value = value

# 优化后的调用方式:无需传递类名
data = {"name": "demo", "value": 456}
obj = payloadA.jsonFromDict(data)

说明

  • 类方法的第一个参数cls会自动绑定当前调用该方法的子类(比如调用payloadA.jsonFromDict()时,cls就是payloadA类)
  • 所有继承自Utils的子类都可以直接复用这个方法,不需要做任何额外修改,彻底避免重复代码

内容的提问来源于stack exchange,提问作者Leonardo Ferrari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:04:54