mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-30 17:56:58 +00:00
49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
import dictutil
|
|
|
|
class NummedObj(object):
|
|
"""
|
|
This is useful for nicer debug printouts. Instead of objects of the same class being
|
|
distinguished from one another by their memory address, they each get a unique number, which
|
|
can be read as "the first object of this class", "the second object of this class", etc. This
|
|
is especially useful because separate runs of a program will yield identical debug output,
|
|
(assuming that the objects get created in the same order in each run). This makes it possible
|
|
to diff outputs from separate runs to see what changed, without having to ignore a difference
|
|
on every line due to different memory addresses of objects.
|
|
"""
|
|
objnums = dictutil.NumDict() # key: class names, value: highest used object number
|
|
|
|
def __init__(self, klass=None):
|
|
"""
|
|
@param klass: in which class are you counted? If default value of `None', then self.__class__ will be used.
|
|
"""
|
|
if klass is None:
|
|
klass = self.__class__
|
|
self._classname = klass.__name__
|
|
|
|
NummedObj.objnums.inc(self._classname)
|
|
self._objid = NummedObj.objnums[self._classname]
|
|
|
|
def __repr__(self):
|
|
return "<%s #%d>" % (self._classname, self._objid,)
|
|
|
|
def __lt__(self, other):
|
|
return (self._objid, self._classname,) < (other._objid, other._classname,)
|
|
|
|
def __le__(self, other):
|
|
return (self._objid, self._classname,) <= (other._objid, other._classname,)
|
|
|
|
def __eq__(self, other):
|
|
return (self._objid, self._classname,) == (other._objid, other._classname,)
|
|
|
|
def __ne__(self, other):
|
|
return (self._objid, self._classname,) != (other._objid, other._classname,)
|
|
|
|
def __gt__(self, other):
|
|
return (self._objid, self._classname,) > (other._objid, other._classname,)
|
|
|
|
def __ge__(self, other):
|
|
return (self._objid, self._classname,) >= (other._objid, other._classname,)
|
|
|
|
def __hash__(self):
|
|
return id(self)
|