上記のTadeckのDjangoの回答を拡張して、Djangoでの「クラスメタ:」の使用も、通常のPythonにすぎません。
内部クラスは、クラスインスタンス間で共有されるデータの便利な名前空間です(したがって、「メタデータ」の名前はメタですが、好きな名前を付けることができます)。Djangoでは一般的に読み取り専用の設定ですが、変更を止めることはできません。
In [1]: class Foo(object):
...: class Meta:
...: metaVal = 1
...:
In [2]: f1 = Foo()
In [3]: f2 = Foo()
In [4]: f1.Meta.metaVal
Out[4]: 1
In [5]: f2.Meta.metaVal = 2
In [6]: f1.Meta.metaVal
Out[6]: 2
In [7]: Foo.Meta.metaVal
Out[7]: 2
Djangoで直接探索することもできます。例:
In [1]: from django.contrib.auth.models import User
In [2]: User.Meta
Out[2]: django.contrib.auth.models.Meta
In [3]: User.Meta.__dict__
Out[3]:
{'__doc__': None,
'__module__': 'django.contrib.auth.models',
'abstract': False,
'verbose_name': <django.utils.functional.__proxy__ at 0x26a6610>,
'verbose_name_plural': <django.utils.functional.__proxy__ at 0x26a6650>}
ただし、Djangoでは、モデルの作成時にモデルによって作成され_meta
たOptions
オブジェクトである属性を探索する可能性が高くなりますmetaclass
。ここに、Djangoクラスのすべての「メタ」情報が表示されます。DjangoではMeta
、_meta
Options
オブジェクトを作成するプロセスに情報を渡すためだけに使用されます。