我遇到了一个问题,我需要两个具有相同实现的类,它们之间的唯一区别是不同的名称和基类。这样做的合理方式是什么?
一个明显的解决方案是违反DRY并复制这样的实现:
class FooA(BaseA):
def frobnicate(self):
print("frob")
class FooB(BaseB):
def frobnicate(self):
print("frob")
答案 0 :(得分:1)
您可以使用多重继承在单个mixin类中实现接口和通用功能。鉴于许多班级对frobnicate
的明确愿望,只需要实施一个frobnicator。 Python从右到左构建类,因此mixins是最左边的。
class Frobnicator(object):
def frobnicate(self):
print("frob")
class FooA(Frobnicator, BaseA):
pass
class FooB(Frobnicator, BaseB):
pass
请注意,mixins通常不会实现自己的__init__
- 这是基类的工作。