我从 Alchin 'pro python' 书中写了一个类似“AttributeDict”的对象(下面几乎直接取自书中。我的目标是创建一个配置对象,其中配置字段可以作为类属性访问)。
class ADict(dict):
def __setattr__(self,key,value):
self[key] = value
def __getattr__(self,key):
return self[key]
当我尝试访问文档时,我得到一个 TypeError,与缺少的 __name__ 属性有关(下面的示例)。
>>> z = ADict()
>>> help(z)
line 1531, in doc
pager(render_doc(thing, title, forceload))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pydoc.py", line 1505, in render_doc
object, name = resolve(thing, forceload)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pydoc.py", line 1500, in resolve
name = getattr(thing, '__name__', None)
File "attributeConfig.py", line 26, in __getattr__
return self[key]
KeyError: '__name__'
这里发生了什么?对我来说,这个 __name__ 的去向并不明显(以及它在 pydoc 代码中的使用方式)。