【发布时间】:2015-05-22 19:36:03
【问题描述】:
假设我有以下类结构:
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()?
【问题讨论】:
-
super()正是您应该使用的,因为它旨在解决这个问题。 -
您应该阅读Super considered super,它准确地解释了如何在多重继承场景中使用 super。
-
@kindall 你如何处理使用
super()选择调用哪个父方法的情况?如果您想按特定顺序调用它们怎么办? -
如果我正确阅读“超级被认为是超级”,它只会调用一个超级并掩盖其他。 Rico 想要称呼这两个超级英雄。
-
来自文档:“第二个用例是支持协作多重继承”。合作意味着类层次结构中的所有类都设计为一起工作。如果
super没有从所有这些中调用,则它们的设计不正确。
标签: python multiple-inheritance