两个类只在基类上有所不同

时间:2016-10-25 18:09:09

标签: python-3.x

我遇到了一个问题,我需要两个具有相同实现的类,它们之间的唯一区别是不同的名称和基类。这样做的合理方式是什么?

一个明显的解决方案是违反DRY并复制这样的实现:

class FooA(BaseA):
    def frobnicate(self):
        print("frob")

class FooB(BaseB):
    def frobnicate(self):
        print("frob")

1 个答案:

答案 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__ - 这是基类的工作。