为什么一个编码的东西事情 __dict__ 这不能用于属性的访问?例如,在我Plone实例, dir(portal) 包括 index_html, 但 portal.index_html 提出了AttributeError.这也是真实的 __class__ 属性的 Products.ZCatalog.Catalog.mybrains.是有一个很好的理由为什么 dir() 不能信任吗?

闲逛的 inspect 模块,我看到他们使用 object.__dict__['x'] 而不是属性访问对于这个原因且因为他们不想要触发器 getattr 魔法。

有帮助吗?

解决方案

我不知道Plone,所以下面是一般的。

文档dir:

如果象有一个方法叫 __dir__(), 这种方法将被和必须返回该列表中的 属性。这允许对象 实现一个自定义 __getattr__()__getattribute__() 功能的定制的方式 dir() 报告他们的 属性。

只是猜测,但我可以想到的两个东西,可能发生的事情--

  • 对象有一个 __dir__() 方法,返回的属性,它没有

  • (可能性较小)的对象 属性,你要求(即这是在 obj.__dict__type(obj).__dict__, 但复盖 __getattr__ 返回 AttributeError

编辑: __dir__ 只是支持在Python2.6+,但(deprecated)特殊属性 __methods____members__ 可以使用,而不是对先前版本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top