Python超级用法示例

Python super usage example

Python docs for super say:return a proxy object that delegates method calls to a parent or sibling class of type

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

http://docs.python.org/2/library/functions.html 355;superfure

有人能给我一个super的例子吗?


使用三角形继承模式时:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>>> 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>

在这里,A.__init__()内部的super(A, self).__init__()称为B.__init__(),一个兄弟类。

super()查看self上mro(方法解析顺序)中的类,按顺序定位第一个参数所在的位置,然后返回下一个类上请求的方法。对于C,MRO是:

1
2
>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <type 'object'>)

因此,super(A, self)寻找Bobject的方法。