【发布时间】:2015-03-13 07:55:52
【问题描述】:
Python 2 文档说super() 函数“返回一个代理对象,它将方法调用委托给类型的父类或同级类。”
问题:
- 什么是 Python 中的同级类?
- 如何将方法调用委托给同级类?
我的假设是给定类的兄弟是从同一个父类继承的类。我起草了以下代码来查看如何将方法调用委托给兄弟,但它不起作用。我做错了什么或理解错了?
class ClassA(object):
def MethodA(self):
print "MethodA of ClassA"
class ClassB(ClassA):
def MethodB(self):
print "MethodB of ClassB"
class ClassC(ClassA):
def MethodA(self):
super(ClassC, self).MethodA()
def MethodB(self):
super(ClassC, self).MethodB()
if __name__ == '__main__':
ClassC().MethodA() # Works as expected
# Fail while trying to delegate method to a sibling.
ClassC().MethodB() # AttirbuteError: 'super' object has no attribute 'MethodB'
【问题讨论】:
-
我没有时间写一个完整的答案,但我认为文档指的是多重继承。如果类 C 继承自 A 和 B,那么您可以认为 A 和 B 在某种意义上是“兄弟姐妹”。
super()在 A 的主体中调用 C 的实例将委托给 B。请参阅 this question 了解详情。 -
这里接受的这个问题的答案解释了
super()确实可以调用父类以及兄弟类的详细信息:stackoverflow.com/questions/5033903/… -
@SimeonVisser,我已经看到了这个问题,甚至给它加了星标。它没有对兄弟类是什么给出明确的答案。这个问题与那个问题有关,但显然不是重复的。
-
@golem: 好吧,在那个例子中你可以看到
super()调用兄弟类而不是父类的情况(B和C都是A的子类) .同级类确实意味着您认为的含义:两个具有相同父类的类,因此它们是同级。super()可以调用父类以及兄弟类。希望这会有所帮助 - 如果没有,请告诉我。 -
@SimeonVisser,请取消将问题标记为重复,以便我可以将我的答案从问题正文移到答案。谢谢。
标签: python oop inheritance super siblings