Albert van der Horst <alb...@spenarnc.xs4all.nl> writes: > I have a type of objects that have complicated enough properties > to warrant a special class for its type. > The class has built in dictionary for all the properties. > > Something along the line of > a = ctype({"poker":True}) > b = ctype({"footbal":True, "gender":"m"}) > c = ctype({"chess":True, "residence":"Amsterdam"}) > I can count each type, again using a dictionary: > db = {} > db[a]=171 > db[b]=208 > > But now I am at a loss as how to look up a ctype z in this db > dictionary efficiently, because all those objects are different > from z. > > Is there a way to turn those ctype things into a hashable type? > (I would then convert z in the same way.) > Once a ctype is invented it never changes. > The only data pertinent to a ctype is its property dictionary. >
Something like this will work (untested): class ctype(object): def __init__(self, propdict): self.propdict = propdict self._hash = hash(frozenset(propdict.items())) def __hash__(self): return self._hash def __eq__(self, other): return isinstance(other, ctype) and self.propdict == other.propdict Note: you should capitalize your class names if you want to comply with PEP 8. HTH -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list