上記の Tadeck の Django の回答を拡張すると、Django での「class Meta:」の使用も通常の Python です。
内部クラスは、クラス インスタンス間でデータを共有するための便利な名前空間です (したがって、「メタデータ」の名前は Meta ですが、好きな名前を付けることができます)。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
である属性を調査する可能性が高くなります。Django クラスの「メタ」情報はすべてここにあります。Django では、オブジェクトを作成するプロセスに情報を渡すためにのみ使用されます。Options
metaclass
Meta
_meta
Options