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

时间:2016-04-03 11:41:27

标签: python python-3.x

我有一个类Coordinate,它包含2个整数值,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
第一行是

当我从参数中删除“:Coordinate”时,程序会起作用,但我想知道是否有一种方法可以让它保持工作状态。

1 个答案:

答案 0 :(得分:2)

首先,PEP 484中引入的类型提示没有任何运行时效果。所以只是因为你没有为那个函数提供类型验证的other: Coordinate。您仍然需要自己检查或只是期望它属于那种类型(根据EAFP principle)。

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

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

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

否则,如果你现在正在定义Coordinate,那么你显然不能直接引用它,因为它还不存在。在这种情况下,您必须使用forward reference

  

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

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