http://effbot.org/zone/python-getattr.htmでは、次のように述べています
Python’s getattr function is used to fetch an attribute from an object, using a string object instead of an identifier to identify the attribute. In other words, the following two statements are equivalent: value = obj.attribute value = getattr(obj, "attribute")
私を混乱させているのは、動的なクラスメソッド生成を備えたクラスを持つモジュールがあることです。__dict__ を呼び出すと返されるため、生成が機能することがわかっています
>>> errors.__dict__
mappingproxy({'__module__': 'utils.errors', '__weakref__':
<attribute '__weakref__' of 'errors' objects>,'404': <classmethod object at
0x7fe547c23190>, '500': <classmethod object at 0x7fe547c23210>, '403':
<classmethod object at 0x7fe547c23110>, '400': <classmethod object at
0x7fe547c23090>})
私を混乱させているのは、 getattr が機能する一方で、属性を直接呼び出すことはできないという顔です
>>> errors.404("asdf")
File "<console>", line 1
errors.404("asdf")
^
SyntaxError: invalid syntax
>>> getattr(errors,'404')("asdf")
{'error': 'Page Not Found', 'code': 404, 'message': 'asdf'}