overwrite set behavior
Diez B. Roggisch
deets at nospam.web.de
Thu Sep 4 07:13:51 EDT 2008
Michele Petrazzo wrote:
> Hi all, I want to modify the method that set use for see if there is
> already an object inside its obj-list. Something like this:
>
> class foo: pass
>
> bar1 = foo()
> bar1.attr = 1
>
> bar2 = foo()
> bar2.attr = 1
>
> set( (bar1, bar2), key=lambda o: o.attr)
>
> and, of course, set has only one value.
>
> It's possible?
Using a decorator/delegate-pattern, yes:
class Foo(object):
def __init__(self, delegate):
self.delegate = delegate
def __hash__(self):
return hash(self.delegate.attr)
def __cmp__(self, other):
return cmp(self.delegate.attr, other.delegate.attr)
set(Foo(a) for a in bar1, bar2)
Diez
More information about the Python-list
mailing list