多继承和设计模式

时间:2019-02-27 09:13:08

标签: python design-patterns multiple-inheritance

facebook-python-business-sdk库中,我看到了一些我认为不好的做法:

AdAccountUserMixin的get_pages()方法使用self.iterate_edge(),它既不是此类的方法,也不是父类的方法。

AbstractCrudObject实现了此方法。

然后,AdAccountUser从这两个类继承。这就是为什么AdAccountUser对象可以使用方法get_pages()。

最小示例:

class AbstractBar:
   def bar(self, x):
       return x

class Foo:
   def foo(self, x):
       return self.bar(x)

class Test(Foo, AbstractBar):
   def test(self, x):
       return self.foo(x)


t = Test()

t.test(5) # returns 5

这是一种设计模式,是您每天都会看到的东西还是不好的做法?

1 个答案:

答案 0 :(得分:1)

这是很普通的mixin class东西。 mixin类是明确设计为补充给定基类或接口的类(它明确地依赖于其“混入”的类来实现给定接口)。当您要从一堆实现相同接口而又没有共同祖先的类中排除某些共同行为时,这非常有用。