“Field”和“Fields”是Django或Python的保留字吗?
我正在开发一个农业相关的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)
这样一来,你就可以避免类名和包名之间的冲突。