It's interesting that setdefault does not call `__setitem__` ```python from easydict import EasyDict a = EasyDict() a['a'] = a print(a['a']) print(a.a) a.setdefault('b', 2) print(a['b']) print(a.b) # <--- AttributeError: 'EasyDict' object has no attribute 'b' ```