"Martin Manns" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] | On Sun, 25 May 2008 14:39:28 -0700 (PDT) | [EMAIL PROTECTED] wrote: | | > This may have some bugs left, but it looks a bit better: | [...] | > self._hash = hash(self._func.func_code) ^ \ | > hash(tuple(signature[0]) + tuple(signature[1:3])) | > def __eq__(self, other): | > return self._func.func_code == other._func.func_code and \ | > getargspec(self._func) == getargspec(other._func) | > def __hash__(self): | > return self._hash | > def __call__(self, *args, **kwargs): | > return self._func(*args, **kwargs) | > | > I haven't put a full hashing of getargspec(self._func) too into the | > __init__() because it may contain too much nested unhashable | > structures, but the __eq__() is able to tell them apart anyway, with | > some collisions. | | Looking at a function: | | >>> a=lambda x:x | >>> dir(a) | ['__call__', '__class__', '__delattr__', '__dict__', '__doc__', | '__get__', '__getattribute__', '__hash__', '__init__', '__module__', | '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', | '__setattr__', '__str__', 'func_closure', 'func_code', 'func_defaults', | 'func_dict', 'func_doc', 'func_globals', 'func_name'] | | Should func_globals and func_name also be taken into account for | __eq__()?
It depends on what *you* want == to mean. tjr -- http://mail.python.org/mailman/listinfo/python-list