假设我有以下类结构:
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/