在 python 中对不相关但形状相似的 类 进行子类型化的模式

Pattern for subtyping unrelated but similarly-shaped classes in python

我有两个 class 形状相同但不共享父级的 class:

class Panda(object):
  def has_thumb(self):
    return True

class Monkey(object):
  def has_thumb(self):
    return True

我想子class其中的每一个以添加一些功能:

class TalkingPanda(Panda):
  def has_thumb(self):
    print("I have a thumb")
    return super().has_thumb()

class TalkingMonkey(Monkey):
  def has_thumb(self):
    print("I have a thumb")
    return super().has_thumb()

有没有办法重构此代码以消除代码重复?

当然可以,因为您已经在使用 super(),所以您可以为此使用 mixin:

class TalkingAnimal:
  def has_thumb(self):
    print("I have a thumb")
    return super().has_thumb()

class TalkingPanda(TalkingAnimal, Panda):
  pass

class TalkingMonkey(TalkingAnimal, Monkey):
  pass