Python超级用法示例

Ank*_*wal 2 python python-2.7

用于超级说法的Python文档:返回一个代理对象,该方法将方法调用委托给父类或兄弟类类型

super(type[, object-or-type])

http://docs.python.org/2/library/functions.html#super

有人能给我一个super示例,其中方法调用被委托给类型的兄弟类?

Mar*_*ers 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>
Run Code Online (Sandbox Code Playgroud)

super(A, self).__init__()里面A.__init__()B.__init__(),兄弟姐妹类.

super()查看MRO中的类(方法解析顺序)on self,找到第一个参数在该顺序中的位置,然后在下一个类之后返回所请求的方法.因为C,MRO是:

>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <type 'object'>)
Run Code Online (Sandbox Code Playgroud)

因此super(A, self)寻找对方法Bobject.