超级说的Python文档:返回一个代理对象,该方法将方法调用委托给类型的父类或兄弟类
super(type[, object-or-type])
http://docs.python.org/2/library/functions.html#super
有人可以给我一个super
示例,其中方法调用被委托给类型的兄弟类吗?
答案 0 :(得分:7)
使用三角形继承模式时:
>>> class A(object):
... def __init__(self):
... print 'A.__init__()'
... super(A, self).__init__()
...
>>> class B(object):
... def __init__(self):
... print 'B.__init__()'
... super(B, self).__init__()
...
>>> class C(A, B):
... def __init__(self):
... print 'C.__init__()'
... super(C, self).__init__()
...
>>> C()
C.__init__()
A.__init__()
B.__init__()
<__main__.C object at 0x10f27e190>
此super(A, self).__init__()
内A.__init__()
名为B.__init__()
,称为super()
,是一个兄弟类。
self
查看C
上MRO(方法解析顺序)中的类,找到第一个参数在该顺序中的位置,然后在下一个类中返回所请求的方法。对于>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <type 'object'>)
,MRO是:
super(A, self)
因此B
会在object
和{{1}}上查找方法。