On 2019-12-11 7:40 a.m., Jonathan Fine wrote:
Consider these two examples: >>> {0} == {0.0} == {False} True >>> hash(0) == hash(0.0) == hash(False) True >>> 0.0 in {False} True >>> class mystr(str): pass >>> 'hi' in {mystr('hi')} TrueThe original poster want a way to obtain the actual object that is in the set, rather than just a truth value. This can be done in O(n) time, by iterating through the set. However, better is possible.Here's are examples, followed by implementaion. >>> from hashhack import HashHack >>> HashHack(2) in {2} (<class 'int'>, 2) False >>> HashHack(2) in {2.0} (<class 'float'>, 2.0) False Here's the implementation. <BEGIN> class HashHack: def __init__(self, obj): self.hash_obj = hash(obj) def __hash__(self): return self.hash_obj def __eq__(self, other): print((type(other), other)) return False <END>
So you could do class Finder: def __init__(self, obj): self.obj = obj def __hash__(self): return self.obj.__hash__() def __eq__(self, other): res = self.obj == other if res: self.found_obj = other return res finder = Finder(x) if finder in foo: return finder.found_obj ?
Looking at this URL helped me https://stackoverflow.com/questions/3588776/how-is-eq-handled-in-python-and-in-what-order -- Jonathan _______________________________________________ Python-ideas mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/[email protected]/message/HU2HJ4LDMAYKZUHMLLAQARDWSLJKWCGO/ Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________ Python-ideas mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/[email protected]/message/HQAVPRCL6KWKMVFYHXMK5TRJQPIEAP2S/ Code of Conduct: http://python.org/psf/codeofconduct/
