Dynamically creating properties?
DevPlayer
devplayer at gmail.com
Thu Oct 27 17:48:54 EDT 2011
On Oct 27, 3:59 pm, Andy Dingley <ding... at codesmiths.com> wrote:
> I have some XML, with a variable and somewhat unknown structure. I'd
> like to encapsulate this in a Python class and expose the text of the
> elements within as properties.
>
> How can I dynamically generate properties (or methods) and add them to
> my class? I can easily produce a dictionary of the required element
> names and their text values, but how do I create new properties at run
> time?
>
> Thanks,
class MyX(object):
pass
myx = myx()
xml_tag = parse( file.readline() )
# should be a valid python named-reference syntax,
# although any object that can be a valid dict key is allowed.
# generally valid python named reference would be the answer to
your question
attribute = validate( xml_tag )
# dynamicly named property
setattr( myx, attribute, property(get_func, set_func, del_func,
attr_doc) )
# "dynamicly named method"
# really should be a valid python named-reference syntax
myfunc_name = validate(myfunc_name)
def somefunc(x):
return x+x
# or
somefunc = lambda x: x + x
setattr( myx, myfunc_name, somefunc )
So beaware of:
# \\\\\\\\\\\\\\\\\\\\\\\\\
setattr(myx, '1', 'one')
myx.1
File "<input>", line 1
x.1
^
SyntaxError: invalid syntax
# \\\\\\\\\\\\\\\\\\\\\\\\\
x.'1'
File "<input>", line 1
x.'1'
^
SyntaxError: invalid syntax
# \\\\\\\\\\\\\\\\\\\\\\\\\
x.__dict__['1'] # returns
'one'
x.__dict__ # returns
{'1': 'one'}
So you should validate your variable names if you are getting them
from somewhere.
More information about the Python-list
mailing list