dir(x) 内のすべての名前が属性アクセスに有効ではないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/485095

質問

なぜコーダーは何かを詰め込むのでしょうか __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() 彼らの属性を報告します。

単なる推測ですが、考えられることが 2 つあります。

  • オブジェクトには、 __dir__() 持っていない属性を返すメソッド

  • (可能性は低いですが) オブジェクト もっている 求めている属性 (つまり、入った obj.__dict__ または type(obj).__dict__, 、ただしオーバーライド __getattr__ 戻る AttributeError

編集: __dir__ は Python 2.6 以降でのみサポートされていますが、(非推奨の) 特別な属性は __methods__ そして __members__ 以前のバージョンの代わりに使用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top