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

单个对象与多个对象:哪种是更优的OOP设计方案?

问题分析与解决方案

首先要指出你原代码里的关键问题:store是类属性,所有Data实例会共享这个字典。不管创建多少个实例,调用add_to_store操作的都是同一个store['key']列表,这会导致数据混乱,必须先修正——把store改成实例属性,让每个实例拥有独立的存储:

class Data:
    def __init__(self):
        self.arg1 = 'value'
        self.arg2 = 'value'
        self.store = {'key': []}  # 改为实例属性,每个对象独立拥有

    def add_to_store(self, contents):  # 必须添加self参数,否则无法访问实例属性
        self.store['key'] += contents

接下来针对你的两种写法,分场景说明:

场景1:每个文件对应独立的Data对象

如果需要为每个文件内容创建独立的Data实例,后续要分别处理每个文件的数据,就用循环创建新对象的写法:

data_instances = []
for file_content in files_contents:
    d = Data()
    d.add_to_store(file_content)
    data_instances.append(d)

这种方式每个d的store只保存对应文件的内容,彼此独立,适合单独操作单文件数据的场景。

场景2:汇总所有文件内容到同一个对象

如果需要把所有文件的内容合并到同一个Data实例的store里,就复用一个对象:

d = Data()
for file_content in files_contents:
    d.add_to_store(file_content)

此时d.store['key']会包含所有文件的内容,适合批量处理全部数据的场景。

如果需要分批处理(比如处理完一批文件后清空存储再处理下一批),可以给Data类加一个清空方法:

class Data:
    def __init__(self):
        self.arg1 = 'value'
        self.arg2 = 'value'
        self.store = {'key': []}

    def add_to_store(self, contents):
        self.store['key'] += contents

    def clear_store(self):
        self.store['key'] = []  # 清空存储列表

使用方式:

d = Data()
for batch in batches_of_files:
    d.clear_store()
    for file_content in batch:
        d.add_to_store(file_content)
    # 处理当前批次的数据

总结

两种写法没有绝对优劣,完全取决于业务需求:

  • 需要独立存储单文件数据 → 每次创建新对象
  • 需要汇总所有数据 → 复用一个对象
  • 需要分批汇总 → 复用对象+清空方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:55:12