3

__dict__コーダーが属性アクセスに使用できないものを詰め込むのはなぜですか? たとえば、私の Plone インスタンスでdir(portal)index_html、 が含まれていますがportal.index_html、AttributeError が発生します。__class__の属性についても同様ですProducts.ZCatalog.Catalog.mybrainsdir()信頼できない正当な理由はありますか?

inspectモジュールを調べてみると、この理由と魔法をトリガーしたくないため、属性アクセスの代わりに使用していることがわかりますobject.__dict__['x']getattr

4

1 に答える 1

2

Ploneについては知らないので、以下は一般的なものです。

ドキュメントからdir

オブジェクトに という名前のメソッドがある場合 __dir__()、このメソッドが呼び出され、属性のリストを返す必要があります。__getattr__()これにより、カスタムまたは __getattribute__()関数を実装するオブジェクトはdir()、その属性を報告する方法をカスタマイズできます。

推測ですが、2 つのことが考えられます。

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

  • (可能性は低い) オブジェクトあなたが求めている属性を持っています (つまり、obj.__dict__ortype(obj).__dict__にありますが、オーバーライド__getattr__して返されます)AttributeError

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

于 2009-01-27T22:30:02.877 に答える