위의 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
한 Options
객체 인 속성 을 탐색하려고합니다 metaclass
. 이곳에서 Django 클래스 '메타'정보를 모두 찾을 수 있습니다. 장고에서는 객체 Meta
를 만드는 과정에 정보를 전달하는 데 사용됩니다 _meta
Options
.