Peter Otten 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?

No. You could write a helper function

def update(obj, **kw):
...     for k, v in kw.items():
...             setattr(obj, k, v)
...

and then use keyword arguments:

class A: pass
...
a = A()
update(a, foo=42, bar="yadda")
a.foo, a.bar
(42, 'yadda')
But if you are doing that a lot and if the attributes are as uniform as their names suggest you should rather use a Python dict than a custom class.

d = {}
d.update(foo=42, bar="whatever")
d
{'foo': 42, 'bar': 'whatever'}
d["bar"]
'whatever'

Peter
Hi Peter, thanks for the reply,

Interesting solution, but it looks as though it may be easier to repeat the class prefix a few times.

Alan

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to