On 15 Aug, 10:35, Gregor Horvath <[EMAIL PROTECTED]> wrote: > > <type 'exceptions.AttributeError'>: type object 'B' has no attribute > 'a.test'
You have to realise that attributes can have names beyond those supported by the usual attribute access syntax. For example: class C: pass setattr(C, "x.y", 123) getattr(C, "x.y") # gives 123 setattr(C, "class $$$", 456) getattr(C, "class $$$") # gives 456 Note that there's no way of using the object.name syntax to access these attributes, although some proposals have been made to allow it in some fashion. What you should conclude from this is that the name argument to setattr and getattr is just a name, not an expression, even if you can construct names which look like expressions or other syntactically meaningful fragments of code. > Documentation says B.a.test and getattr(B, "a.test") should be equivalent. > > http://docs.python.org/lib/built-in-funcs.html No, the documentation says that the name must be "the name of one of the object's attributes", not an expression fragment that if combined with the name of the object and evaluated would yield an attribute from some object or other reachable via the original object. Paul -- http://mail.python.org/mailman/listinfo/python-list