我在学习 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/