On Mon, 28 Jan 2008 19:21:48 +1100, Ben Finney wrote: > In fact, here's a variation that doesn't even need a language > change:: > > >>> class Foo(object): > ... def __init__(self, spam, eggs, beans): > ... self.__dict__.update(dict( > ... (name, value) for (name, value) in \ > ... vars().items() if name in ['spam', 'beans'])) > ...
You still need to repeat yourself twice. That's 33% better than repeating yourself three times, but 100% worse than repeating yourself once. Other problems: (1) Readability suffers greatly. (2) Performance takes a big hit. >>> class Parrot(object): ... def __init__(self, name, colour, breed): ... self.name = name ... self.colour = colour ... self.breed = breed ... >>> class Parrot2(object): ... def __init__(self, name, colour, breed): ... self.__dict__.update(dict((name, value) for ... (name, value) in vars().items() ... if name in ['name', 'colour', 'breed'])) ... >>> >>> >>> import timeit >>> timeit.Timer("Parrot(1, 2, 3)", ... "from __main__ import Parrot").repeat() [3.3467490673065186, 2.2820541858673096, 2.2934978008270264] >>> timeit.Timer("Parrot2(1, 2, 3)", ... "from __main__ import Parrot2").repeat() [13.148159027099609, 13.015455961227417, 11.936856985092163] -- Steven -- http://mail.python.org/mailman/listinfo/python-list