mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-04-27 06:20:25 +00:00
util: copy in nummedobj from pyutil
This commit is contained in:
parent
fb85a6280f
commit
cef24792e7
48
src/allmydata/util/nummedobj.py
Normal file
48
src/allmydata/util/nummedobj.py
Normal file
@ -0,0 +1,48 @@
|
||||
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)
|
Loading…
x
Reference in New Issue
Block a user