S'étendant sur la réponse Django de Tadeck ci-dessus, l'utilisation de 'class Meta:' dans Django est également un Python normal.
La classe interne est un espace de noms pratique pour les données partagées entre les instances de classe (d'où le nom Meta pour «métadonnées» mais vous pouvez l'appeler comme vous le souhaitez). Alors que dans Django, il s'agit généralement de configuration en lecture seule, rien ne vous empêche de le changer:
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
Vous pouvez également l'explorer directement dans Django, par exemple:
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>}
Cependant, dans Django, vous êtes plus susceptible de vouloir explorer l' _meta
attribut qui est un Options
objet créé par le modèle metaclass
lors de la création d'un modèle. C'est là que vous trouverez toutes les informations «méta» de la classe Django. Dans Django, Meta
est simplement utilisé pour transmettre des informations dans le processus de création de l' _meta
Options
objet.