extend getattr()

Jared Grubb jared.grubb at gmail.com
Fri Jun 27 03:41:41 EDT 2008


You could overload __getattr__ (might have to play around a bit to make sure
any possible AttributeError's look right, but the basic idea is here)
class A(object):
  # ...
  def __getattr__(self, name):
      try:
        return object.__getattribute__(self, name)
      except AttributeError:
        if '.' in name:
          attrs = name.split('.')
          first = object.__getattribute__(self, attrs[0])
          return getattr(first, '.'.join(attrs[1:]))
        raise

>>> a = A()
>>> a.b = A()
>>> a.b.c = A()
>>> a.b.c.d = A()
>>> getattr(a, 'b.c.d')
<__main__.A object at 0x67f50>




On 26 Jun 2008, at 04:06, Rotlaus wrote:

Hello,

lets assume i have some classes:

class A(object):
   def __init__(self):
       b = B()

class B(object):
   def __init__(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?

Kind regards,

Andre
--
http://mail.python.org/mailman/listinfo/python-list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20080627/718e19e3/attachment-0001.html>


More information about the Python-list mailing list