关于python:多个父方法调用的Pythonic方法

Pythonic Approach to Multiple Parent Method Calls

假设我有以下类结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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是一个登录处理程序。父类中的功能将填充实例变量(例如,错误消息)。

调用父母的get_data方法时,哪种方法最像Python?

获取此类信息的一种方法可能如下:

1
2
3
4
original_class = self.__class__.__base__
parents = [base for base in original_class.__bases__]
for parent in parents:
    parent.get_data()

我不认为这是一个不合理的方法,但如果我必须开始爬到元我开始怀疑是否有一个更Python的方法。

有什么建议吗?是否可以使用super()进行此操作?


1
2
3
4
5
class MyClass(Mixin1, Mixin2):
    def get_data(self):
        # do local stuff
        data2 = Mixin2.get_data(self)
        data1 = Mixin1.get_data(self)

而且,这篇文章似乎是相关的。

另一种方法是使用包容而不是继承。