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

时间:2018-12-18 12:21:07

标签: python python-3.x refactoring dry

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

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

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

我想对每个子类进行子类化以添加一些功能:

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()

有没有一种方法可以重构此代码以消除重复的代码?

1 个答案:

答案 0 :(得分:3)

当然,由于您已经在使用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