gpt4 book ai didi

python - 为什么不是 dir(x) 中的所有名称都对属性访问有效?

转载 作者:行者123 更新时间:2023-11-28 17:55:17 25 4
gpt4 key购买 nike

为什么编码人员会将不能用于属性访问的内容塞入 __dict__ 中?例如,在我的 Plone 实例中,dir(portal) 包含 index_html,但是 portal.index_html 引发了 AttributeError。 Products.ZCatalog.Catalog.mybrains__class__ 属性也是如此。 dir() 不可信有充分的理由吗?

查看 inspect 模块,我看到他们使用 object.__dict__['x'] 而不是属性访问,因为他们不想触发getattr 魔法。

最佳答案

我不了解Plone,所以以下是一般情况。

来自 the docs 目录:

If the object has a method named __dir__(), this method will be called and must return the list of attributes. This allows objects that implement a custom __getattr__() or __getattribute__() function to customize the way dir() reports their attributes.

这里只是猜测,但我能想到可能发生的两件事--

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

  • (不太可能)对象具有您要求的属性(即它在obj.__dict__type(obj) 中。 __dict__,但覆盖 __getattr__ 以返回 AttributeError

编辑:__dir__ 仅在 Python 2.6+ 中受支持,但是(已弃用)特殊属性 __methods____members__ 可以代替早期版本使用。

关于python - 为什么不是 dir(x) 中的所有名称都对属性访问有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/485095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com