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