我遇到了一个问题,我需要两个具有相同实现的类,它们之间的唯一区别是不同的名称和基类。这样做的合理方法是什么?
一个明显的解决方案是违反 DRY 并复制如下实现:
class FooA(BaseA):
def frobnicate(self):
print("frob")
class FooB(BaseB):
def frobnicate(self):
print("frob")
最佳答案
您可以使用多重继承在单个 mixin 类中实现接口(interface)和通用功能。鉴于许多类都明确希望frobnicate
,只需实现一个 frobnicator 即可。 Python 从右到左构建类,因此 mixins 位于最左边。
class Frobnicator(object):
def frobnicate(self):
print("frob")
class FooA(Frobnicator, BaseA):
pass
class FooB(Frobnicator, BaseB):
pass
请注意,mixin 通常不会实现自己的 __init__
- 这是基类的工作。
关于python-3.x - 两个类仅在基类上不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40246814/