You need to enable JavaScript to run this app. Python开发:如何传递类实例属性避免显式初始化其他类减少冗余
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 12:03:03