2010-08-16 94 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__') 
相關問題