custom classes in sets
Steven Bethard
steven.bethard at gmail.com
Mon Feb 14 02:17:34 EST 2005
vegetax wrote:
> How can i make my custom class an element of a set?
>
> class Cfile:
> def __init__(s,path): s.path = path
>
> def __eq__(s,other):
> print 'inside equals'
> return not os.popen('cmp %s %s' % (s.path,other.path)).read()
>
> def __hashcode__(s): return s.path.__hashcode__()
>
> the idea is that it accepts file paths and construct a set of unique
> files (the command "cmp" compares files byte by byte.),the files can
> have different paths but the same content
>
> but the method __eq__ is never called
Seems to be called fine for me:
py> class Cfile:
... def __eq__(self, other):
... print 'inside equals'
... return False
... def __hash__(self):
... return 0
...
py> {Cfile():1, Cfile():2}
inside equals
{<__main__.Cfile instance at 0x01166490>: 1, <__main__.Cfile instance at
0x01166760>: 2}
Note that __eq__ won't be called if the hashes are different:
py> class Cfile:
... hash = 0
... def __eq__(self, other):
... print 'inside equals'
... return False
... def __hash__(self):
... Cfile.hash += 1
... return Cfile.hash
...
py> {Cfile():1, Cfile():2}
{<__main__.Cfile instance at 0x01166918>: 1, <__main__.Cfile instance at
0x011668A0>: 2}
Steve
More information about the Python-list
mailing list