Skip to content

Instantly share code, notes, and snippets.

@h2rd
Last active December 28, 2015 11:18
Show Gist options
  • Select an option

  • Save h2rd/7492052 to your computer and use it in GitHub Desktop.

Select an option

Save h2rd/7492052 to your computer and use it in GitHub Desktop.
class DictAttr(object):
def __init__(self, attrs):
self.attrs = dict(attrs)
def __getitem__(self, key):
if key not in self.attrs:
raise AttributeError
return self.attrs[key]
def __getattr__(self, key):
if key not in self.attrs:
raise AttributeError
return self.attrs[key]
def get(self, key, value=None):
return self.attrs[key] if key in self.attrs else value
if __name__ == '__main__':
d = DictAttr([('one', 1), ('two', 2), ('three', 3)])
assert d['one'], 1
assert d['two'], 2
assert d['three'], 3
assert d.one, 1
assert d.two, 2
assert d.three, 3
assert d.get('one'), 1
assert d.get('two'), 2
assert d.get('three'), 2
assert d.get('five', 'missing'), 'missing'
try:
assert d.eleven, AttributeError
except AttributeError, e:
pass
try:
assert d['eleven'], AttributeError
except AttributeError, e:
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment