On Tue, Apr 20, 2010 at 2:59 PM, Alan Harris-Reid <aharrisr...@googlemail.com> wrote: > Stefan Behnel wrote: >> Alan Harris-Reid, 20.04.2010 15:43: >>> During my Python (3.1) programming I often find myself having to repeat >>> code such as... >>> >>> class1.attr1 = 1 >>> class1.attr2 = 2 >>> class1.attr3 = 3 >>> class1.attr4 = 4 >>> etc. >>> >>> Is there any way to achieve the same result without having to repeat the >>> class1 prefix? Before Python my previous main language was Visual >>> Foxpro, which had the syntax... >>> >>> with class1 >>> .attr1 = 1 >>> .attr2 = 2 >>> .attr3 = 3 >>> .attr4 = 4 >>> etc. >>> endwith >>> >>> Is there any equivalent to this in Python? >> >> There's more than one way to do this, depending on your actual needs and >> the source of the attributes. I assume this is done in __init__? >> >> This might work for you: >> >> self.__dict__.update(attr1=1, attr2=2, attr3=3, attr4=4) >> >> You should also think once more about the use of the code you presented >> above, having to set all those attributes may have a little smell. Maybe >> that's totally ok, but since you mention that you "often" find yourself >> doing the above, you may also have a mental design problem somewhere. We >> can't tell unless you provide a more concrete example than what you show >> above. >> >> Stefan > > Hi Stefan, thanks for the reply. > > The code is not usually in class.__init__ (otherwise I would have used the > self. prefix), but I like your self.__dict__.update(...) solution and I'll > try and remember it. > > The code I was thinking of goes something like as follows (don't have a > specific example to hand, but the principal is the same)... > > NewClass = BaseClass() > NewClass.attr1 = value1 > NewClass.attr2 = value2 > NewClass.attr3 = value3 > etc. > > So if there are more than a couple of attributes to set for a class > instance, how would you approach it (short of passing the values as > parameters to BaseClass)?
Why are you against passing them as parameters? If your constructor would have a lot of parameters, it may be a sign that: (A) you have some Data Clumps (http://martinfowler.com/bliki/DataClump.html) among the parameters that ought to be made into full objects (B) your class is doing too many things and needs to be split into multiple classes (http://www.refactoring.com/catalog/extractClass.html) Cheers, Chris -- Yay Refactoring! http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list