* __getattr__ would allow it to no longer AttributeError while
simultaneously letting linters and type checkers understand that
this is a bag of dynamic attributes.
* __contains__ allows checking for the existence of an attribute
* __getitem__ allows accessing a value even if its name is not a valid
Python identifier.