python - Django、Python 和类变量

标签 python django

我在学习 Python 的同时学习了 Django。我熟悉许多其他语言。

在下面的代码片段中,x 是类 Foo 的类变量。

class Foo(object):
    x = 9000

鉴于前面的声明,下面的工作正常。

打印 Foo.x

Django 框架允许您通过定义 Python 类来创建模型。它使用 Python 类中的不同类变量创建字段。

class Question(models.Model):
    question_text = models.CharField(max_length=200)

为什么下面的代码片段:

#!/usr/bin/env
import os, django
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
django.setup()
from polls.models import Question, Choice
print Question.question_text

抛出以下错误:

AttributeError: type object 'Question' has no attribute 'question_text'

据我所知,我的 Question 类定义了一个静态成员:Question.question_text

最佳答案

Django 模型使用 metaclass改变正常的类(Class)行为。

使用 dir(Question),您会看到该类现在有不同的 属性。然而,这是仅针对 Django 模型的自定义行为。

有好奇可以研究the metaclass __new__ method ,但它做了很多特定于对象关系映射任务的很多工作。

关于python - Django、Python 和类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27475401/

相关文章:

python - 如何获取特定模型的 id?

python - 将嵌套的 dict/json 转换为 django ORM 模型,无需对数据结构进行硬编码

python - Django : Direct assignment to the forward side of a many-to-many set is prohibited. 改为使用 user.set()

python - 如何水平对齐按钮?

python - Alexa 不会使用 lambda 和 python 播放流中的音频

python regex 3 相同的 [0-9A-Fa-f] 对

python - 子类安全的类变量

python - 'hg strip' 创建的补丁已损坏

python - 计算子组中缺失的实例

python - Django:CSS 和图像(静态文件)加载成功但未应用