您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

我可以在Python 2.5.6中使用Python 3 super()吗?

我可以在Python 2.5.6中使用Python 3 super()吗?

您不能使用不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
python 2022/1/1 18:50:02 有364人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶