Skip to content

Instantly share code, notes, and snippets.

@messense
Created April 12, 2014 03:37
Show Gist options
  • Save messense/10517540 to your computer and use it in GitHub Desktop.
Save messense/10517540 to your computer and use it in GitHub Desktop.
Python ObjectDict
class ObjectDict(dict):
def __getattr__(self, key):
if key in self:
return self[key]
return None
def __setattr__(self, key, value):
self[key] = value
@alingse
Copy link

alingse commented Oct 1, 2020

x = {'a': [1, 2, 3], 'b': {'c': 2}}  

class ObjectDict(dict):

    def __getattr__(self, name):
        try:
            return self[name]
        except KeyError:
            raise AttributeError(name)

    def __setattr__(self, name, value):
        self[name] = value

    def __delattr__(self, name):
        del self[name]

def format_object(data):
    if isinstance(data, dict):
        return ObjectDict({
            k: format_object(v)
            for k, v in data.items()
        })
    elif isinstance(data, list):
        return [format_object(v) for v in data]
    else:
        return data

y = format_object(x)
assert y.a[0] == 1
assert y.b.c == 2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment