モジュールのインスタンスを動的に作成する __getattr__ のような機能でモジュールを拡張するには
getattr メソッドは通常、クラスに対して動作しますが、モジュールには直接適用できません。これに対処するには、属性アクセスを置換クラスのインスタンスにリダイレクトするラッパー関数を実装できます。
<code class="python">class Wrapper: def __init__(mod): setattr(mod, '__getattr__', getattrmod)</code>
このラッパー クラスは、カスタマイズされたgetattr メソッドが getattrmod と呼ばれます。
<code class="python">sys.modules[__name__] = Wrapper</code>
モジュール自体をラッパーで置き換えることにより、モジュール上の将来の属性アクセスが可能になります。モジュールは getattr メソッドによってインターセプトされます。
<code class="python">def getattrmod(mod, attr): # Create an instance of the substitution class instance = Class() # Invoke the method with the same name as the missing attribute return getattr(instance, attr)</code>
以上がモジュールで __getattr__ のような動作を使用して動的属性アクセスを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。