Python超级用法示例

时间:2014-01-01 01:51:11

标签: python python-2.7

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

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

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

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

1 个答案:

答案 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}}上查找方法。