|
7 | 7 | 'type_map', 'ifnone', 'maybe_attr', 'basic_repr', 'BasicRepr', 'is_array', 'listify', 'tuplify', 'true', |
8 | 8 | 'NullType', 'tonull', 'get_class', 'mk_class', 'wrap_class', 'ignore_exceptions', 'exec_local', |
9 | 9 | 'risinstance', 'ver2tuple', 'Inf', 'in_', 'ret_true', 'ret_false', 'stop', 'gen', 'chunked', 'otherwise', |
10 | | - 'custom_dir', 'AttrDict', 'AttrDictDefault', 'NS', 'get_annotations_ex', 'eval_type', 'type_hints', |
| 10 | + 'custom_dir', 'adict', 'AttrDict', 'AttrDictDefault', 'NS', 'get_annotations_ex', 'eval_type', 'type_hints', |
11 | 11 | 'annotations', 'anno_ret', 'signature_ex', 'union2tuple', 'argnames', 'with_cast', 'store_attr', 'attrdict', |
12 | 12 | 'properties', 'camel2words', 'camel2snake', 'snake2camel', 'class2attr', 'getcallable', 'getattrs', |
13 | 13 | 'hasattrs', 'setattrs', 'try_attrs', 'DepProp', 'GetAttrBase', 'GetAttr', 'delegate_attr', 'ShowPrint', |
@@ -269,18 +269,22 @@ def custom_dir(c, add): |
269 | 269 | "Implement custom `__dir__`, adding `add` to `cls`" |
270 | 270 | return object.__dir__(c) + listify(add) |
271 | 271 |
|
272 | | -# %% ../nbs/01_basics.ipynb #48249e34 |
273 | | -class AttrDict(dict): |
| 272 | +# %% ../nbs/01_basics.ipynb #ea75f86b |
| 273 | +class adict(dict): |
274 | 274 | "`dict` subclass that also provides access to keys as attrs" |
275 | 275 | def __getattr__(self,k): return self[k] if k in self else stop(AttributeError(k)) |
276 | 276 | def __setattr__(self, k, v): (self.__setitem__,super().__setattr__)[k[0]=='_'](k,v) |
277 | 277 | def __dir__(self): return super().__dir__() + list(self.keys()) |
| 278 | + |
| 279 | +# %% ../nbs/01_basics.ipynb #28bf9743 |
| 280 | +class AttrDict(adict): |
| 281 | + "`dict` subclass that also provides access to keys as attrs, and has a pretty markdown repr" |
278 | 282 | def _repr_markdown_(self): return f'```python\n{pprint.pformat(self, indent=2)}\n```' |
279 | 283 | def copy(self): return AttrDict(**self) |
280 | 284 |
|
281 | 285 | # %% ../nbs/01_basics.ipynb #cb8a0ff4 |
282 | 286 | class AttrDictDefault(AttrDict): |
283 | | - "`AttrDict` subclass that returns `None` for missing attrs" |
| 287 | + "`AttrDict` subclass that returns `default_` for missing attrs" |
284 | 288 | def __init__(self, *args, default_=None, **kwargs): |
285 | 289 | self.default_ = default_ |
286 | 290 | super().__init__(*args, **kwargs) |
|
0 commit comments