使用メタクラス

ラージオブジェクト指向プログラムでは、時々、クラス定義の制御下で有用メタクラスであろう。要素クラスは、プログラマかもしれない警告注意(例えば、わずかに互換性のないメソッドシグネチャ)のクラスチェックと潜在的な問題を定義します。

いくつかは、プログラム解析ツールやIDEが良いこのタイプのエラーを取り込むことができると主張するかもしれません。確かに、このようなツールが便利です。あなたが使用する他の人のためのフレームワークやライブラリを作成したい場合は、通常、その開発手法の厳密性を制御することはできません。そのようなチェックは、より良いユーザー体験をもたらすならばこのように、アプリケーションの特定の種類のために、あなたはいくつかの追加のチェックをメタクラスする必要があるかもしれません。

再定義__new __()または__init __()メタクラスの選択には、クラスの結果をどのように使用するかによって異なります。クラスが作成される前に__new __()あなたはメタクラスで(辞書コンテンツの種類を変更することで)何らかの方法でクラス定義を変更したい場合、通常使用、と呼ばれています。__init __()メソッドは、クラスが作成された後、あなたはクラスオブジェクトの完全な形を書きたい場合と仕事へのコードは、この方法が有用であると呼ばれています。それはスーパー()関数は、以前の定義を検索する使用しているため、最後の例では、それは、必要不可欠です。これは、クラスのインスタンスを作成し、有効な後のメソッド解決順序(MRO)のための基盤を設定するだけです。

最後の例はまた、Pythonの関数シグネチャオブジェクトの使用を示します。本質的に、各クラスのメタクラスを使用して(もしあれば)以前に定義された検索、定義を呼び出すことができ、次いでinspect.signature()コールは、単に彼らの署名を比較します。

最後になりましたが、スーパーを使用することである(自己は、自己)コードの行はタイプミスではありません。ときメタクラス、自己が実際にクラスオブジェクトであることを認識することが重要です。したがって、文は実際には親のさらに精細に位置構成するクラス階層自体を検索するために使用されます。

おすすめ

転載: www.cnblogs.com/jeffrey-yang/p/12389210.html