【发布时间】:2018-04-02 15:12:09
【问题描述】:
pythonbuilt-in 方法是否可以在某个包中引用?
让我解释一下。在我早期使用 python 时,我制作了一个类似于以下的 django 模型:
class MyModel(models.Model):
first_name = models.CharField(max_length=100, null=True, blank=True)
last_name = models.CharField(max_length=100, null=True, blank=True)
property = models.ForeignKey("Property")
此后我需要为其添加一个属性。这给我留下了这个模型:
class MyModel(models.Model):
first_name = models.CharField(max_length=100, null=True, blank=True)
last_name = models.CharField(max_length=100, null=True, blank=True)
property = models.ForeignKey("Property")
@property
def name(self):
return "{} {}".format(first_name, last_name)
所以现在在运行时出现错误:TypeError: 'ForeignKey' object is not callable。发生这种情况是因为属性的 ForeignKey 已替换内置标识符属性。我希望能够做的是,而不是 @property 使用 @sys.property (或类似的东西)。
注意:我已经知道将 name 属性移到属性字段声明上方的解决方法。我不太关心这种特殊情况,因为我是引用 python 内置程序的替代位置的主要问题。
【问题讨论】:
-
也许我不明白,但你不能把你的
MyModel类重命名为property,比如_property或者what-have-you? -
不,但这并不意味着我的无关紧要。
-
好的。我正在查看的类代表一个正在生产中的数据库表。现在将
property字段名称更改为其他名称是不切实际的。在 django 中还有其他解决方法,但我主要是好奇内置程序是否存在于某个名称空间中,而我的(诚然三心二意的)谷歌搜索没有出现任何结果。 -
好的,我明白了,太糟糕了。 Python 的关键字和内置函数经常与人们想要使用的名称发生冲突,例如
file和list。你所能做的就是尽量记住它们,从一开始就避免这些问题。命名空间有帮助,但几乎任何语言都会有一个全球性的(所以最好远离它)。即使您做对了所有事情,语言更改仍然会咬您一口(就像他们在 2.2 版中添加property()时一样)。