在类参数中引用我自己的数据类型



我有一个类Coordinate,它包含两个整数值,x和y。

我有一个比较2个坐标的方法,看看它们是否相等,但当我试图将该函数的参数定义为坐标时,我会得到一个NameError。

这是我的代码:

def equals(self, other:Coordinate):
    try:
        return (self.x==other.getX()) and (self.y==other.getY())
    except AttributeError:
        return False

然而,当我运行类文件时,我得到错误

NameError: name 'Coordinate' is not defined

第一行。

当我从参数中删除":坐标"时,程序就可以工作了,但我想知道是否有办法让它在保持不变的情况下工作。

首先,在PEP484中引入的类型提示没有任何运行时效果。因此,仅仅因为执行了other: Coordinate,就不会对该函数进行类型验证。你仍然需要自己检查,或者只是期望它是那种类型(根据EAFP原则)。

也就是说,虽然类型注释没有针对类型安全性进行评估,但它们仍然是Python的一部分,是一种实际的元数据语法。所以你在那里所做的一切都必须是完全有效的。

在您的情况下,没有定义名称Coordinate。这基本上只是意味着没有变量Coordinate,该变量的值可以分配给该参数的注释元数据。

因此,如果Coordinate与您定义的类型不同,那么您可能只是错过了某个地方的导入。

否则,如果您现在正在定义Coordinate,那么您显然不能直接引用它,因为它还不存在。在这种情况下,您将不得不使用前向参考:

当类型提示包含尚未定义的名称时,该定义可以表示为字符串文字,稍后解析。

所以你只需要在这里使用一个字符串'Coordinate'

相关内容

最新更新