Graham Dumpleton: wrapt を使った遅延... ノート
RSS惑星Python

Graham Dumpleton: wrapt を使った遅延インポート

PEP 810 は、Python における遅延モジュールインポートのための明示的な構文を導入します。以前は、パッケージが同様の機能を提供していましたが、専用の言語サポートが欠けていました。wrapt ライブラリの新しい遅延オブジェクトプロキシ機能により、遅延インポートを簡単に実装できます。wrapt の主な目的はモンキーパッチであり、これには透過的なオブジェクトプロキシが含まれます。これらのプロキシはターゲットオブジェクトへのアクセスをインターセプトし、特定のアクションを可能にします。遅延オブジェクトプロキシは、オブジェクト自体ではなく、最初のアクセス時にターゲットオブジェクトを作成する関数を受け取ります。これにより、wrapt.LazyObjectProxy__import__ を使用した例で示されるように、遅延モジュールインポートが可能になります。sys.modules を偽のモジュールで事前に変更する一部の方法とは異なり、このアプローチはグローバルな変更を回避します。wrapt の例の影響は、遅延インポートが行われたスコープに限定され、PEP 810 のローカライズされた効果という目標に沿っています。ただし、標準のインポートステートメントとは異なる構文が必要です。PEP 810 は、スコープ内に偽のモジュールオブジェクトが存在することを回避し、最初の使用時に参照が実際のモジュールになることを保証することを目指しています。wrapt の例ではプロキシオブジェクトを維持しており、将来的に実際のモジュールに置き換えるための機能強化の可能性があります。