Mở rộng câu trả lời Django của Tadeck ở trên, việc sử dụng 'lớp Meta:' trong Django cũng chỉ là Python bình thường.
Lớp bên trong là một không gian tên thuận tiện cho dữ liệu được chia sẻ giữa các thể hiện của lớp (do đó tên Meta cho 'siêu dữ liệu' nhưng bạn có thể gọi nó là bất cứ thứ gì bạn thích). Mặc dù trong Django, công cụ cấu hình chỉ đọc, không có gì ngăn bạn thay đổi:
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
Bạn cũng có thể khám phá nó trong Django, vd:
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>}
Tuy nhiên, trong Django, bạn có nhiều khả năng muốn khám phá _meta
thuộc tính là Options
đối tượng được tạo bởi mô hình metaclass
khi mô hình được tạo. Đó là nơi bạn sẽ tìm thấy tất cả thông tin 'meta' của lớp Django. Trong Django, Meta
chỉ được sử dụng để truyền thông tin vào quá trình tạo _meta
Options
đối tượng.