最近、Pythonでメタクラスを発見しました。
基本的に、Pythonのメタクラスは、クラスを作成するクラスです。これを実行する理由はたくさんあります。たとえば、あらゆる種類のクラスの初期化です。工場でのクラスの登録、属性の複雑な検証、継承の仕組みの変更など。これらすべてが可能になるだけでなく、簡単になります。
しかし、Pythonでは、メタクラスもプレーンクラスです。それで、私は抽象化が有用にもっと高くなることができるかどうか疑問に思い始めました、そしてそれが可能であるように私には思えます:
- メタクラスは、パターン内の役割に対応するか、その役割を実装します(GOFパターン言語の場合と同様)。
- メタメタクラスはパターン自体です(単一のクラスではなく、抽象的な役割を表すクラスのタプルを作成できる場合)
- meta-meta-metaclassはパターンファクトリであり、GOFパターングループ(作成、構造、動作など)に対応します。特定のタイプの問題のケースを記述でき、それを解決する一連のクラスを提供するファクトリ。
- meta-meta-meta-metaclass(私が知る限り)は、パターンファクトリファクトリです。これは、問題のタイプを説明できるファクトリであり、パターンファクトリに問い合わせることができます。
私はこれについてオンラインでいくつかのことを見つけましたが、ほとんどの場合あまり役に立ちません。1つの問題は、言語が異なればメタクラスの定義もわずかに異なることです。
他の誰かがpython/elsewhereでこのようなメタクラスを使用したり、これが実際に使用されているのを見たり、考えたりしたことがありますか?他の言語の類似物は何ですか?たとえば、C ++では、テンプレートの再帰はどのくらい深くなることができますか?
さらに調べてみたいと思います。