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
--
http://mail.python.org/mailman/listinfo/python-list