Get attribute this way

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Tue Nov 17 04:49:50 EST 2009


King a écrit :
> Python's getattr, setattr and __getattribute__ commands

s/commands/functions/

> works fine
> with python types.
> For example:
> print o.__getattribute__("name")

A very few corner cases set aside - the main one being inside a custom 
__getattribute__ method -, you should not directly access 
__getattribute__ (nor most __magic_methods__ FWIW).

> print getattr(o, "name")
> This is the easiest way to get an attribute using a string.
> 
> In my case the "Node" class load/creates all the attributes from a xml
> file.
> Example
> <Input name="position" type="float" value="0.5"/>
> <Input name="color" type="color" value="0,0,0"/>
> 
> There are certain atrributes of compound type.

There's no "compound type" in Python. There are only objects, objects 
and objects.

> Example:
> # Array of colors, Here we are referring first color and second element
> (green)
> self.gradient.colors[0][1] = 0.5
> # Array of floats, referring first element
> self.gradient.positions[0] = 1.0
> 
> Color, color array and floats are all custom classes.
> 
> Now question is how to get these compound attributes using string as
> we do with default singular attributes.
> Example:
> getattr(o, "gradient.colors[0][1] ")

You can't (at least OOTB). the expression:

   gradient.colors[0][1]

is a shortcut for:

   colors = gradients.__getattribute__("color")
   colors_0 = colors.__getitem__(0)
   colors_0_1 = colors_0.__getitem__(1)

You can of course do something like

   g = getattr(o, "gradient")
   c = getattr(g, "colors")
   # etc...

but I guess this is not what you're after.

> I need this to save the data of nodes->attributes into a custom xml
> format,  when loading this data back, I create the node first and then
> setup values from the saved xml file.

I really don't think you need anything like this to serialize / 
unserialize your objects (whatever the format FWIW).  You should really 
google for +python +serialize +XML, I bet you'd find at least a couple 
helpful articles on that topic.



More information about the Python-list mailing list