'Calls __getattr__ on the remote object and returns the attribute
by value or by proxy depending on the options set (see
ObjectProxy._setProxyOptions and RemoteEventHandler.setProxyOptions)
If the option \'deferGetattr\' is True for this proxy, then a new proxy object
is returned _without_ asking the remote object whether the named attribute exists.
This can save time when making multiple chained attribute requests,
but may also defer a possible AttributeError until later, making
them more difficult to debug.'

def __getattr__(self, attr, **kwds):

    opts = self._getProxyOptions()
    for k in opts:
        if (('_' + k) in kwds):
            opts[k] = kwds.pop(('_' + k))
    if (opts['deferGetattr'] is True):
        return self._deferredAttr(attr)
    else:
        return self._handler.getObjAttr(self, attr, **opts)
