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

仅在单一位置使用的组合类,采用组合设计有何优势?

问题解答

先看你给出的原始代码实现:

class my_class:
  def __init__(self, arg1, arg2, arg3):
    self.data = data(arg1, arg2, arg2)
    # initialize some other attributes

# the only place data class is used is in my_class
class data:
  def __init__(self, arg1, arg2, arg3):
    self.arg1 = arg1
    self.arg2 = arg2
    self.arg3 = arg3

你优化后的实现:

class my_class:
  def __init__(self, arg1, arg2, arg3):
    self.arg1 = arg1
    self.arg2 = arg2
    self.arg3 = arg3
    # initialize some other attributes

是否符合设计规范

你的这种调整完全符合简约设计与单一职责原则的核心要求:

  • 由于data类仅在my_class内部使用,且没有独立的业务逻辑,只是单纯存储属性,拆分出来反而增加了不必要的层级。合并后代码结构更紧凑,my_class的职责边界也更清晰。
  • 这种优化不仅不违反设计规范,反而消除了无意义的抽象,让代码逻辑更直接易懂。

核心优势

  • 降低认知成本:其他开发者阅读代码时,无需额外理解一个仅作数据存储的辅助类,逻辑一目了然,不用在两个类之间跳转确认功能。
  • 简化维护流程:后续如果要修改这几个属性的规则(比如增加参数校验、调整赋值逻辑),直接在my_class内部操作即可,无需跨类修改。
  • 消除代码冗余:原data类没有额外行为,只是重复的属性赋值逻辑,合并后彻底去掉了这种冗余代码。
  • 微幅提升性能:减少了一次类实例化的开销,虽然这个影响在大多数场景下可以忽略,但在高频调用场景下仍有微弱优势。

当然,如果未来data类需要扩展独立方法(比如数据格式化、属性校验),或者需要在其他模块复用,再拆分出来也完全合理——但就当前的需求场景来看,你的优化方案是更优的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:22:07