如何实现AlchemicalStorage类的extract()方法满足指定需求?
实现AlchemicalStorage的extract()方法
要满足「首次调用返回存储的所有元素,后续调用返回空列表,且每次调用后清空存储」的需求,我们可以给AlchemicalStorage类添加一个私有状态标记,跟踪是否已经执行过首次提取操作。
完整实现代码
class AlchemicalElement: def __init__(self, name): self.name = name class AlchemicalStorage: def __init__(self): self.storage_list = [] # 私有变量标记是否已完成首次提取 self._has_extracted = False def add(self, element): if isinstance(element, AlchemicalElement): self.storage_list.append(element) def extract(self): # 首次调用返回当前存储的所有元素副本,后续直接返回空列表 result = self.storage_list.copy() if not self._has_extracted else [] # 每次调用后强制清空存储,首次调用后永久标记为已提取状态 self.storage_list.clear() self._has_extracted = True return result
代码说明
_has_extracted是类内部的私有状态变量,仅用于判断是否执行过首次提取- 返回存储列表的副本(
copy()),避免外部代码修改类内部的存储状态 - 无论是否为首次调用,执行
extract()后都会清空storage_list,且首次调用后所有后续调用都会返回空列表
测试示例
# 创建元素实例 fire = AlchemicalElement("Fire") water = AlchemicalElement("Water") earth = AlchemicalElement("Earth") # 初始化存储对象 storage = AlchemicalStorage() storage.add(fire) storage.add(water) # 首次提取 first_result = storage.extract() print([elem.name for elem in first_result]) # 输出: ['Fire', 'Water'] print(len(storage.storage_list)) # 输出: 0 # 添加新元素后再次提取 storage.add(earth) second_result = storage.extract() print([elem.name for elem in second_result]) # 输出: [] print(len(storage.storage_list)) # 输出: 0
内容的提问来源于stack exchange,提问作者fallguy
相关产品推荐
相关产品推荐

