2010-08-16 46 views
0

在调试运行,为什么CMD2不会加载在Jython中,我发现,它打破了,因为Jython的返回false gettattr([alist],'__reversed__')而Python返回True。的Jython返回false gettattr([ALIST], '__ reversed__')而Python返回True

我将认为正确的结果是真为列表可逆..

任何人都知道是怎么回事?

我的下一个选项是浏览周围的Jython源..和我不期待它;)

顺便说一句,我在Ubuntu

使用Jython 2.5.1 Java的“1.6.0_18”的顶部

对于任何提示都提前Thx

+0

请编辑的问题,以反映您正在寻找的\ _ \ _ reversed__属性,而不是相反属性(您可以转义下划线或使用缩进代码区域来防止下划线被视为降价)。 – 2010-09-27 13:39:17

回答

2

看起来就好像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__' 

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