【发布时间】:2019-10-17 04:20:34
【问题描述】:
在其他语言中,静态变量只能通过类名访问,与该类的实例完全无关。
我一直在关注 Django Polls App Tutorial。似乎在声明模型时,该模型的字段是静态变量:
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
不过,本教程随后演示了如何使用 Django shell:
>>> from polls.models import Question
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
这真的让我感到困惑,因为我们似乎正在构造 q,一个类型为 Question 的对象,但它以某种方式能够保存信息(question_test 和 pub_date)我以为只与类有关,与实例(静态变量)无关。
有人可以向我解释发生了什么吗?
如何将这些数据位分配给类的实例?这是与 Python 或 Django 相关的东西吗?如果是这样,q 甚至代表什么?它只代表表格中的一行吗?
这很奇怪来自 C++,其中静态变量永远不能与类的对象相关。
【问题讨论】:
-
那是 Django ORM。在此处阅读更多信息docs.djangoproject.com/en/2.2/topics/db/models。
-
这是一个常见的误解。这些字段不可通过实例访问。它们用于在创建时填充实例;请注意,您将字符串和日期作为实例变量,而不是字段类的实例。
-
@DanielRoseman,所以为了清楚起见,静态变量
question_text和pub_date仅用于初始化对象q内部的一些内部数据?这究竟是如何工作的?他们只是在对象q中动态创建实例数据成员吗?这似乎有点奇怪,因为我假设该类将只有一个普通的__init__(self)函数,它将声明它需要的任何内部数据成员,然后实例将获得它们自己的副本。类的静态变量在创建时变成了实例变量,这似乎有点奇怪。 -
@DanielRoseman,另外,您的评论是迄今为止回答我问题的最接近的内容,如果您要为我的问题创建答案,我可能会接受。