Python开发:如何传递类实例属性避免显式初始化其他类减少冗余
解决方案
核心实现思路
你可以直接利用Python实例的__dict__属性完成参数传递:所有实例的属性默认都会以键值对的形式存储在__dict__内置字典中,正好匹配MyClass_2、MyClass_3的**kwargs参数规则,不需要逐个手动写参数传递。
基础改法
原来的func1、func2方法可以直接简化为:
def func1(self): # 全量传入MyClass_1的所有实例属性 return MyClass_2(**self.__dict__).func() def func2(self): return MyClass_3(**self.__dict__).func()
如果不需要把name属性也传入目标类,可以先过滤字典再拆包:
def func1(self): # 仅传入参数相关的属性,过滤掉name params = {k:v for k, v in self.__dict__.items() if k != 'name'} return MyClass_2(**params).func()
进一步精简冗余逻辑(可选)
你还可以去掉重复的func1、func2方法,用映射表直接匹配name对应的目标类,大幅减少冗余代码。同时修正原代码里的两处语法错误:__init__方法定义漏括号、类名大小写拼写不一致。
修改后的完整代码如下:
class MyClass_1(object): def __init__(self, name, x1, x2, x3): self.name = name self.x1 = x1 self.x2 = x2 self.x3 = x3 # 建立name和目标类的映射关系 self._class_map = { 'func1': MyClass_2, 'func2': MyClass_3 } def run(self): target_class = self._class_map.get(self.name) if not target_class: raise ValueError(f"不支持的name参数值: {self.name}") return target_class(**self.__dict__).func() class MyClass_2(object): # 修正原代码__init__漏写括号的语法错误 def __init__(self, **kwargs): self.__dict__.update(kwargs.items()) def func(self): # 你的业务逻辑 return class MyClass_3(object): # 修正原代码__init__漏写括号的语法错误 def __init__(self, **kwargs): self.__dict__.update(kwargs.items()) def func(self): # 你的业务逻辑 return
内容的提问来源于stack exchange,提问作者KAJ226
相关产品推荐
相关产品推荐

