Шаблон для подтипа несвязанных, но похожих по форме классов в Python - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть два класса, которые имеют одинаковую форму, но не разделяют родительский класс:

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 голосов
/ 18 декабря 2018

Конечно, поскольку вы уже используете super(), вы можете использовать миксин для этого:

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
...