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模型中的内部类:
这只是一个类容器,模型附加了一些选项(元数据)。它定义了可用权限、关联的数据库表名、模型是否抽象、名称的单数和复数形式等
这里有一个简短的解释:Django docs: Models: Meta options
可用的元选项列表如下:Django docs: Model Meta options
Python中的元类:
最好的描述如下:What is a metaclass in Python?
在上面Tadeck的Django答案的基础上,在Django中使用“class Meta:”也只是普通的Python。
内部类是类实例之间共享数据的方便命名空间(因此“Meta”的名称为Meta,但您可以随意调用它)。在Django中,它通常是只读配置,没有什么可以阻止您更改它:
您也可以在Django直接浏览,例如:
但是,在Django中,您更可能希望在创建模型时探索由模型创建的
metaclass
对象Options
属性。在这里您可以找到所有Django类的“meta”信息。在Django中,Meta
只用于将信息传递到创建_meta
Options
对象的过程中。Django的
Model
类专门处理具有名为Meta
的属性的类。这不是一般的Python。Python元类完全不同。
相关问题 更多 >
编程相关推荐