Python には「パラメータ化されたクラス」がない (または必要ない) ため、Python でそれらの例を提供するのは困難です;-)。メタクラスは単に「クラスのクラス」です: 通常type
(Py2 では、 から継承してクラスを新しいスタイルにすることを覚えている限り、object
または他の組み込み型または他の新しいスタイルのクラス -- 古いスタイル クラスは Py2 のレガシー アーティファクトであり、幸いなことに Py3 では姿を消しました。理想的には、それらについては忘れてください)。type
いくつかの高度な目的のためにカスタム メタクラス (通常はサブクラス化) を作成できますが、必要になる可能性はほとんどありません (特に、python 2.6 以降、カスタム メタクラスを必要としていた多くのことをより簡単に実行できることを考えると)。クラス デコレータを使用)。
クラス C が与えられると、type(C)
そのメタクラスになります。
パラメータ化されたクラスは、まったく異なる概念です。Python でこれに最も近いのは、おそらく引数に基づいてクラスを作成して返すファクトリ関数です。
def silly(n):
class Silly(object):
buh = ' '.join(n * ['hello'])
return Silly
Silly1 = silly(1)
Silly2 = silly(2)
a = Silly1()
print(a.buh)
b = Silly2()
print(b.buh)
印刷します
hello
hello hello
繰り返しますが、これは頻繁に必要になるものではありません— 1 つまたはいくつかの引数だけが異なるいくつかのクラスを作成します。とにかく、ご覧のとおり、クラスのクラス (AKA メタクラス) とはまったく関係がありません。これは、常にtype
この例に含まれています (そして、私が考えることができるほとんどすべてのより現実的な例では、単純な例を示すことを選択しました)。 、これを行うポイントは、現実的で必然的に非常に複雑なものではなく、見分けるのが難しい場合です;-)。