看起来就好像Jython中列表的__reversed__属性没有实现。我不明白你所描述的结果,如果我在Python 2.5.2调用
getattr([], '__reversed__')
,我得到
>>> [].__reversed__
<built-in method __reversed__ of list object at 0x7f72581d7050>
而且在Jython的2.5.1,我得到
>>> [].__reversed__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute '__reversed__'
如果它返回的分别或True
False
,那么你很可能不使用标准的Python列表。
在任何情况下,它看起来好像Jython的不支持列表中的__reversed__属性表明它是可逆的。根据the documentation,此功能似乎已被添加到Python 2.6中的CPython实现中,这可能解释了为什么它不会出现在Jython 2.5.1中。我发现__reversed__出现在Python 2.5.2中,因此它可能已被移植到CPython,但尚未正式支持。
现在,你可以建议CMD2的东西,如以下修补:
def can_be_reversed(o):
"return True if an object can be reversed by reverse()"
return hasattr(o, '__reversed__') or \
hasattr(o, '__len__') and hasattr(o, '__getitem__')
请编辑的问题,以反映您正在寻找的\ _ \ _ reversed__属性,而不是相反属性(您可以转义下划线或使用缩进代码区域来防止下划线被视为降价)。 – 2010-09-27 13:39:17