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

Python类重构:优化API对象组的直接访问方式

优化方案

1. 封装单个对象类,简化属性访问

先创建SingleObject类,把API返回的原始对象包装起来,将深层嵌套的属性调用封装为直接可访问的属性或方法,避免重复的深层路径调用:

from xyz import api

class SingleObject:
    def __init__(self, api_object):
        self._api_obj = api_object  # 保留原始API对象,兼容旧逻辑

    @property
    def name(self):
        # 把复杂的深层调用封装为直接属性
        return self._api_obj.internalclass.internalfunc.name

    # 可按需添加更多封装的属性/方法,比如常用API操作
    def execute_action(self):
        return self._api_obj.some_api_action()

2. 改造集合类,支持直接查找+兼容原有逻辑

修改GroupOfObjects类,初始化时将API对象转换为SingleObject实例,同时构建快速查找的索引,并且保留迭代能力,确保原有循环代码无需修改:

class GroupOfObjects:
    def __init__(self):
        # 保留原有初始化逻辑
        self.objects = self.get_objects()
        # 构建名字到对象的映射,支持O(1)时间复杂度查找
        self._name_index = {obj.name: obj for obj in self.objects}

    def get_objects(self):
        api_objects = api.service.Objects()
        # 将API返回对象转换为封装后的SingleObject列表
        return [SingleObject(obj) for obj in api_objects]

    # 新增:通过名字直接获取对象
    def get_by_name(self, name):
        return self._name_index.get(name)

    # 保留原有方法,避免破坏旧代码
    def get_object_name(self, obj):
        if isinstance(obj, SingleObject):
            return obj.name
        # 兼容传入原始API对象的场景
        return obj.internalclass.internalfunc.name

    # 让集合类支持迭代,原有for循环代码完全兼容
    def __iter__(self):
        return iter(self.objects)

3. 使用方式示例

兼容原有代码(无需修改)

objects = GroupOfObjects()
for x in objects:
    if objects.get_object_name(x) == 'abcdef':
        # 原有逻辑正常执行

新的简化访问方式

objects = GroupOfObjects()
# 直接通过名字获取目标对象
target_obj = objects.get_by_name('abcdef')
if target_obj:
    # 直接访问封装后的属性
    print(target_obj.name)
    # 调用封装后的方法
    target_obj.execute_action()

4. 进阶优化:通用查找支持

如果需要按更多属性查找,可以扩展集合类,添加通用查找方法或构建多属性索引:

# 扩展GroupOfObjects类
def find_by_attr(self, attr_name, value):
    """根据指定属性查找对象"""
    for obj in self.objects:
        if getattr(obj, attr_name, None) == value:
            return obj
    return None

# 使用示例
target_obj = objects.find_by_attr('name', 'abcdef')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:45:20