看起來就好像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