为什么要使用组合?

Why use composition at all?

当我们可以直接向方法添加依赖时,创建组件并通过它们委托行为的原因是什么?对我来说,后者似乎为改变现有对象的行为敞开了大门,从而创造了更松散的耦合?

Composition/delegation:

class Human:
  def __init__(self, legs):
    self._legs = legs

  def run(self):
    self._legs.run()

  def walk(self):
    self._legs.run()

直接向方法注入依赖:

class Human:
  def run(self, legs):
    legs.run()

  def walk(self, legs):
    legs.walk()

告诉我,我为什么要费心作文?

你应该只在有目的的情况下使用组合。在您的示例中,它没有任何用处,因为您可以直接在 legs 上调用方法,根本不用理会 Human

扩展您的示例,如果每个 Human 实例都有其自己不同的 legs 实例,组合就有意义了。在这种情况下,您需要跟踪哪个 legs 属于哪个 Human,第一个示例解决了这个问题。