Am 13.05.2012 21:11, schrieb Bob Grommes: > Noob alert: writing my first Python class library. > > I have a straightforward class called Utility that lives in Utility.py. > > I'm trying to get a handle on best practices for fleshing out a library. As > such, I've done the following for starters: > > def __str__(self): > return str(type(self)) > > # def __eq__(self,other): > # return hash(self) == hash(other) > > The commented-out method is what I'm questioning. As-is, I can do the > following from my test harness:
By the way, that's a dangerous and broken way to implement __eq__(). You mustn't rely on hash() in __eq__() if you want to use your object in sets and dicts. You must implement __hash__ and __eq__ in a way that takes all relevant attributes into account. The attributes must be read only, otherwise you are going to break sets and dicts. Here is a best practice example: class Example(object): def __init__(self, attr1, attr2): self._attr1 = attr1 self._attr2 = attr2 @property def attr1(self): return self._attr1 @property def attr2(self): return self._attr2 def __eq__(self, other): if not isinstance(other, Example): return NotImplemented return (self._attr1 == other._attr1 and self._attr2 == other._attr2) def __hash__(self): return hash((self._attr1, self._attr2)) # optional def __ne__(self, other): if not isinstance(other, Example): return NotImplemented return not self == other -- http://mail.python.org/mailman/listinfo/python-list