多父方法调用的 Pythonic 方法

标签 python multiple-inheritance

假设我有以下类结构:

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 方法的最 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似乎是相关的。

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

关于多父方法调用的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30404640/

相关文章:

python - 优先连接 Pandas 数据框

python - 在特定行之后读取 csv 中的数据

c++ - 一个基类的多重继承

Python:多重继承、复制构造函数、类初始化和()重载

c++ - 多重继承类的复制构造函数

python - ftplib 执行时出错

python - 将数组添加到 numpy 数组

python - PassEnv 变量 OPENSHIFT_POSTGRESQL_DB_HOST 在 Openshift 中未定义

python - 遍历返回 NotImplemented 的 Python 特殊方法的 MRO

c++ - 在C++中为多继承组合类创 build 计的指南