在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
这是一种设计模式,你每天看到的东西还是一种不好的做法?
这是非常普通的mixin class的东西。 mixin类是一个明确设计的类,用于补充给定的基类或接口(它明确地依赖于它“混入”的类来实现给定的接口)。当你想从一堆没有共同祖先的类实现相同接口的类中分解出一些常见行为时,这非常有用。