Steven Bethard wrote: > 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:
I just tried and it wont be called =(, so how can i generate a hash code for the CFile class? note that the comparitions(__eq__) are done based on the contents of a file using the command 'cmp', i guess thats not posible but thanks. -- http://mail.python.org/mailman/listinfo/python-list