Ondrej Sika

getattr, setattr, hassattr recursive in Python

13 Nov 2013

hasattr2

def hasattr2(obj, attr):
    try:
        getattr(obj, attr)
        return True
    except AttributeError:
        try:
            a1 = attr[:attr.index(".")]
            a2 = attr[attr.index(".")+1:]
        except ValueError:
            return False
        return hasattr2(getattr(obj, a1), a2)

getattr2

def getattr2(obj, attr, otherwise=None):
    try:
        return getattr(obj, attr)
    except AttributeError:
        try:
            a1 = attr[:attr.index(".")]
            a2 = attr[attr.index(".")+1:]
        except ValueError:
            return otherwise
        return getattr2(getattr(obj, a1), a2, otherwise)

setattr2

def setattr2(obj, attr, value):
    if attr.rfind(".") != -1:
        a1 = attr[:attr.rfind(".")]
        a2 = attr[attr.rfind(".")+1:]
    else:
        setattr(obj, attr, value)
        return
    if not hasattr2(obj, a1):
        raise AttributeError
    setattr(getattr2(obj, a1), a2, value)

Share on Facebook, Twitter, Google+, Linkedin

comments powered by Disqus

--