Предположит, у меня есть следующие структуры класса:Pythonic подхода к множественному методу Parent вызовов
class Mixin1(Base1):
def get_data(self):
# Gather some data in some way
class Mixin2(Base2):
def get_data(self):
# Gather some data in another way
class MyClass(Mixin1, Mixin2):
def get_data(self):
# Gather some data in yet another way. Then...
# Get Mixin2's version of get_data. Then...
# Get Mixin1's version of get_data.
Пример случай, чтобы обеспечить некоторый контекст, что Mixin1
является обработчиком аутентификации и Mixin2
является обработчиком Войти. Функциональность родительских классов будет заполнять переменные экземпляра (скажем, сообщения об ошибках).
Какой был бы самый Pythonic подход к вызову методов родителя get_data
?
Один подход, чтобы получить этот вид информации может быть что-то вроде этого:
original_class = self.__class__.__base__
parents = [base for base in original_class.__bases__]
for parent in parents:
parent.get_data()
Я не рассматриваю это как необоснованный подход, но если я должен начать ползать в мета я начинаю задаваться вопросом, существует более питоновский подход.
Любые предложения? Можно ли использовать для этого super()
?
'super()' именно то, что вы должны использовать, так как оно предназначено для решения именно этой проблемы. – kindall
Вы должны прочитать [Super рассмотренный супер] (https://rhettinger.wordpress.com/2011/05/26/super-considered-super/), который объясняет, как использовать супер в сценарии множественного наследования. –
@kindall Как вы обрабатываете случай выбора метода родителя для вызова с помощью 'super()'? Что, если вы хотите назвать их в определенном порядке? – cpburnz