Python の
getattr と getattribute の比較
__getattr__ と __getattribute__ の違いを理解することが重要ですPython オブジェクトを操作するとき。どちらのメソッドも、オブジェクトから属性を取得する方法を制御するように設計されていますが、実行する機能が異なり、特定の使用例があります。
新しいスタイル クラス
詳細を調べる前に__getattr__ と __getattribute__ の違いを考えると、「新しいスタイルのクラス」の概念を明確にする価値があります。 Python には、新しいスタイルと古いスタイルの 2 種類のクラスがあります。新しいスタイルのクラスは、オブジェクト クラスから明示的または暗黙的に継承するクラスであり、古いスタイルのクラスは、基底クラスが定義されていない Python 2.x のクラスです。ただし、この区別は __getattr__ と __getattribute__ の選択には関係ありません。
getattr と getattribute
__getattr__ は次のとおりです。オブジェクトのディクショナリまたはそのベースのいずれにも見つからない属性にアクセスしたときに呼び出されます。クラス。これにより、オブジェクト自体に存在しない属性を取得するためのフォールバック メカニズムを実装できます。このメソッドは、メタプログラミング シナリオなどで動的な属性アクセスを提供するためによく使用されます。一方、
__getattribute__ は、オブジェクトの属性にアクセスするときに、属性が存在するかどうかに関係なく呼び出されます。これは、オブジェクトの辞書または基本クラスがチェックされる前に呼び出されます。 __getattribute__ の実装は、無限再帰を防ぐために慎重な処理が必要なため、難しい場合があります。
getattr または getattribute
を使用する場合] 要約すると、欠落している属性の属性取得を処理したい場合は __getattr__ を使用する必要があります。フォールバックメカニズムを提供します。 __getattribute__ はより多用途ですが、正しく実装するにはより複雑になる可能性があり、通常、ほとんどの実用的な目的には必要ありません。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3