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

如何实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:01:13