您不能使用不super()
包含任何类型/类的裸调用。您也无法实施可行的替代方案。Python 3.x包含特殊支持以启用裸super()
调用(它将__class__
单元变量放在类中定义的所有函数中-请参阅PEP3135
从Python 2.6+开始, 可以 通过Python包使用裸super()
调用。请参阅posita的答案以获取解释。__future
知道这个问题太旧了,所选的答案当时可能是正确的,但不再完整。您仍然不能super()在2.5.6中使用,但是为2.6+python-future
提供了反向移植的实现:
安装python-future方式:
% pip install future
下面显示了superunder的重新定义builtins:
% python
...
>>> import sys
>>> sys.version_info[:3]
(2, 7, 9)
>>>
>>> super
<type 'super'>
>>>
>>> from builtins import *
>>> super
<function newsuper at 0x000000010b4832e0>
>>> super.__module__
'future.builtins.newsuper'
可以如下使用:
from builtins import super
class Foo(object):
def f(self):
print('foo')
class Bar(Foo):
def f(self):
super().f() # <- whoomp, there it is
print('bar')
b = Bar()
b.f()
哪个输出
foo
bar
如果您使用pylint,则可以使用以下注释禁用旧版警告:
# pylint: disable=missing-super-argument