Code redundancy
Jean-Michel Pichavant
jeanmichel at sequans.com
Wed Apr 21 05:38:35 EDT 2010
Alan Harris-Reid wrote:
> Jean-Michel Pichavant wrote:
>> Alan Harris-Reid wrote:
>>> Hi,
>>>
>>> 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?
>>>
>>> Any help would be appreciated.
>>>
>>> Alan Harris-Reid
>> Hello,
>>
>> Use an effective text editor, repeating stuff should not be a
>> problem. In a more general manner, avoid trying to speed your writing
>> while you should care speeding the reading.
>> Most of the tricks you could use will confuse the reader (unless the
>> reader is familiar with Visual foxpro).
>>
>> Anyway,
>>
>> for attrName, value in [
>> ('attr1', 1),
>> ('attr2', 2),
>> ('attr3', 3),
>> ]:
>> setattr(class1, attrName, value)
>>
>> or
>>
>> class Foo:
>> def __init__(self):
>> self.attr1=None
>> self.attr2=None
>> self.attr3=None
>>
>> def set(self, *args, **kwargs):
>> for k in kwargs:
>> if hasattr(self, k):
>> setattr(self, k, kwargs[k])
>> else:
>> raise AttributeError('%s instance has no attribute "%s"' %
>> (self.__class__.__name__, k))
>>
>> f = Foo()
>> f.set(attr1=25)
>> print f.__dict__
>> f.set(attr3=4, attr2=89)
>> print f.__dict__
>> f.set(bar= 8)
>>
>> output:
>> {'attr2': None, 'attr3': None, 'attr1': 25}
>> {'attr2': 89, 'attr3': 4, 'attr1': 25}
>> AttributeError: Foo instance has no attribute "bar"
>>
>>
>> JM
>>
> Hi Jean-Michel,
>
> Interesting solutions, but I think for the effort involved (and
> readability) I'll stick to repeating the class.
>
> Regards,
> Alan
that's the way to go :)
JM
More information about the Python-list
mailing list