Hi all,

I'm trying to create a new instance from an existing instance with attributes 
of the new instance allowed to be overwritten by keyword parameters.  I'm 
guessing I'm not doing this in the most efficient manner.

class Spam:
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def __repr__(self):
        return "%s: (%d,%d)" % (self.__class__.__name__, self.a, self.b)

def new_with_overrides(s1, **kwargs):
    new_params = {'a': s1.a, 'b': s1.b}
    for (k, v) in kwargs.iteritems():
        if k in new_params:
            new_params[k] = v
    return Spam(new_params['a'], new_params['b'])

s1 = Spam(4, 10)
s2 = new_with_overrides(s1)
s3 = new_with_overrides(s1, a=3)
s4 = new_with_overrides(s1, b=7)

This works but it doesn't seem very extendable if new attributes are added to 
Spam.  I know that I can make new_with_overrides a method of Spam and that may 
simplify things a bit (e.g. using __dict__).

thanks, matt
    
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to