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

Python 在类参数中引用我自己的数据类型,python,python-3.x,Python,Python 3.x,我有一个类坐标,它包含两个整数值,x和y 我有一个方法来比较两个坐标,看看它们是否相等,但是当我试图将这个函数的参数定义为坐标时,我得到了一个NameError 这是我的密码: def equals(self, other:Coordinate): try: return (self.x==other.getX()) and (self.y==other.getY()) except AttributeError: return False 然而

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

我有一个方法来比较两个坐标,看看它们是否相等,但是当我试图将这个函数的参数定义为坐标时,我得到了一个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”时,程序会工作,但我想知道是否有一种方法可以让它工作,同时仍保持在该参数中。

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

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

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

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

否则,如果您现在正在定义坐标,那么您显然无法直接引用它,因为它还不存在。在这种情况下,您必须使用:

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


所以你只需要在这里使用一个字符串
“坐标”

这是什么语法
other:Coordinate
似乎无效。@ForceBru:是。如果
Coordinate
是类的名称,请使用字符串:
other:Coordinate
。定义完类后,将对字符串求值。