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
相关产品推荐
相关产品推荐

