我正在研究一個庫,該庫實現了可以與任何有序數據類型(範圍集)一起工作的數據結構。當你允許正面和負面的無限時,許多操作(如倒置)變得有趣。在python中爲任何對象創建無窮大和負無窮大
一個目標是讓datetime對象與該模塊工作,並與非數字對象支持無限大,我創建INFINITY和NEGATIVE_INFINITY:
class _Indeterminate(object):
def __eq__(self, other):
return other is self
@functools.total_ordering
class _Infinity(_Indeterminate):
def __lt__(self, other):
return False
def __gt__(self, other):
return True
def __str__(self):
return 'inf'
__repr__ = __str__
@functools.total_ordering
class _NegativeInfinity(_Indeterminate):
def __lt__(self, other):
return True
def __gt__(self, other):
return False
def __str__(self):
return '-inf'
INFINITY = _Infinity()
NEGATIVE_INFINITY = _NegativeInfinity()
不幸的是,這並不爲工作datetime對象時,在CMP()操作的左手邊:
In [1]: from rangeset import *
In [2]: from datetime import datetime
In [3]: now = datetime.now()
In [4]: cmp(INFINITY, now)
Out[4]: 1
In [5]: cmp(now, INFINITY)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/axiak/Documents/rangeset/<ipython-input-5-c928d3687d92> in <module>()
----> 1 cmp(now, INFINITY)
TypeError: can't compare datetime.datetime to _Infinity
我希望我可以通過使用CMP的包裝,只是確保我的對象總是叫繞過這個限制,但我真的想使用.sort()
m這將導致在這些對象之間調用cmp。
有沒有什麼辦法可以創建一個比其他任何對象都小得多的對象,並且真的比其他任何對象都要大?
模塊主頁:https://github.com/axiak/py-rangeset
這是正確的答案,謝謝! –