虽然为什么cmd2不会在Jython中加载,但我发现它因为当Python返回True时Jython返回False到gettattr([alist],'__reversed__')
而中断了。
我认为正确的结果为True,因为列表 是可逆的。
任何人都知道发生了什么事?
我的下一个选择是浏览Jython源代码..我并不期待它;)
BTW,我在ubuntu上的java“1.6.0_18”之上使用jython 2.5.1
预先提示任何提示
答案 0 :(得分:2)
看起来好像Jython中列表的__reversed__属性没有实现。如果我打电话
,我不会得到你描述的结果getattr([], '__reversed__')
在Python 2.5.2中,我得到了
>>> [].__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__属性以指示它是可逆的。根据{{3}},这个特性似乎已被添加到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__')