From: Jean-Michel Pichavant on 20 Apr 2010 13:57 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
|
Pages: 1 Prev: UnicodeEncodeError during repr() Next: python glibc crypt() function |