“Field”和“Fields”是Django或Python的保留字吗?

3 投票
2 回答
1417 浏览
提问于 2025-04-18 11:53

我正在开发一个农业相关的django项目。我想把一个应用命名为“fields”,然后在这个“fields”应用里再创建一个模型,叫做“Field”(指的是农田)。

我试过了,这样做是可以的,所以我猜“fields”和“Field”在Django或Python中不是保留字。不过我在想,使用这些词将来会不会有什么问题,还是说这样用没关系?

还有一个普遍的问题:有没有办法检查一个词在Django或Python中是否是保留字?

2 个回答

2

简单有趣的解释

答案就是不可以

因为语言本身才有权利拥有任何东西。就像Python是房子的主人,而Django的人是在给Python的人交租。那么,Django的人怎么能保留房子里的东西呢?

同样的道理也适用于这里。

2

严格来说,“保留字”这个说法不太准确。保留字是编程语言的一部分,而Django并不是一种编程语言。

Django里有一个叫做Field的类,它在django.db.models.fields这个包里,还有一个(相似但不同的)类也叫Field,在django.forms.fields这个包里。

不过,这些Field类的层级比较低,通常你不会需要去导入它们,所以它们不会和你自己定义的Field类产生冲突。

总之,正如你所看到的,在Django内部,同一个类可以在多个包里存在,并且名字是一样的。这是没问题的,因为包名起到了命名空间的作用,所以你总是可以通过使用完整的包名来明确指定一个类。

在Python中,还有一个很实用的功能,就是可以用不同的名字导入类:

from django.db.models.fields import Field as DjangoField
help(DjangoField)

同样,你也可以用不同的名字导入包:

from django.db.models import fields as djangofields
help(djangofields.Field)

这样一来,你就可以避免类名和包名之间的冲突。

撰写回答