如何调用父类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
相关产品推荐
相关产品推荐

