Code redundancy
Alan Harris-Reid
aharrisreid at googlemail.com
Tue Apr 20 17:59:11 EDT 2010
Stefan Behnel wrote:
> <div class="moz-text-flowed">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)?
Regards,
Alan
More information about the Python-list
mailing list