Мульти наследование и шаблон проектирования - PullRequest
0 голосов
/ 27 февраля 2019

В библиотеке 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 голосов
/ 27 февраля 2019

Это довольно обычный класс миксина материал.Класс mixin - это класс, который явно разработан для дополнения заданного базового класса или интерфейса (он явно использует класс, с которым он «смешивается» для реализации данного интерфейса).Это очень полезно, когда вы хотите выделить какое-то общее поведение из группы классов, которые реализуют один и тот же интерфейс, не имея общего предка.

...