多个父方法调用的 Pythonic 方法

Pythonic Approach to Multiple Parent Method Calls

假设我有以下 class 结构:

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 是登录处理程序。父 classes 中的功能将填充实例变量(例如,错误消息)。

调用父项的 get_data 方法的最 Pythonic 方法是什么?

获取此类信息的一种方法可能是这样的:

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

我不认为这是一种不合理的方法,但如果我必须开始深入元数据,我开始怀疑是否有更 Pythonic 的方法。

有什么建议吗?是否可以为此使用 super()

class MyClass(Mixin1, Mixin2):
    def get_data(self):
        # do local stuff
        data2 = Mixin2.get_data(self)
        data1 = Mixin1.get_data(self)

另外,this post好像也有关系。

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