当Python返回True时,Jython返回False到gettattr([alist],'__ reversed__')

时间:2010-08-16 07:19:15

标签: jython

虽然为什么cmd2不会在Jython中加载,但我发现它因为当Python返回True时Jython返回False到gettattr([alist],'__reversed__')而中断了。

我认为正确的结果为True,因为列表 是可逆的。

任何人都知道发生了什么事?

我的下一个选择是浏览Jython源代码..我并不期待它;)

BTW,我在ubuntu上的java“1.6.0_18”之上使用jython 2.5.1

预先提示任何提示

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__'

如果它分别返回TrueFalse,那么您可能没有使用标准的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__')