extend getattr()

Cédric Lucantis omer at no-log.org
Thu Jun 26 13:39:09 CEST 2008


Le Thursday 26 June 2008 13:06:53 Rotlaus, vous avez écrit :
> Hello,
>
> lets assume i have some classes:
>
> class A(object):
>     def __init__(self):
>         b = B()
>
> class B(object):
>     def __init__(self):
>         c = C()
>

note you're just defining some local variables here, should be self.b = B() 
and self.c = C().

> class C(object):
>     def __init__(self):
>         pass
>
> and now i wanna do something like this:
>
> a=A()
> c=getattr(a, 'b.c')
>
> I know this doesn't work, but what can i do to get this or a similar
> functionality to get it work for this sample and for even more nested
> classes?
>

You could do it manually:

c = getattr(getattr(a, 'b'), 'c')

or make it automatic:

def get_dotted_attr (obj, dotted_attr) :
	for attr in dotted_attr.split('.') :
		obj = getattr(obj, attr)
	return obj

a = A()
print 'a.b.c = %s' % get_dotted_attr(a, 'b.c')

-- 
Cédric Lucantis



More information about the Python-list mailing list