2016-04-03 107 views
1

我有一个类坐标,它包含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 

的第一道防线。

该程序工作时,我从参数中删除“:坐标”,但我想知道是否有办法让它工作,同时仍然保持在那里。

+0

这是什么样的语法? 'other:Coordinate'似乎不正确。 – ForceBru

+1

@ForceBru:它是[函数注释](https://docs.python.org/3/tutorial/controlflow.html#function-annotations)。 – zondo

+0

如果'Coordinate'是类的名称,请使用字符串:'other:“坐标”'。字符串将在类完成定义后进行评估。 – zondo

回答

2

首先,PEP 484中引入的类型提示没有任何运行时效果。所以只是因为你的other: Coordinate这个函数没有给你类型验证。你仍然需要自己检查一下,或者只是期望它是这种类型的(根据EAFP principle)。这就是说,尽管类型注释没有为类型安全性评估,但它们仍然是一种实际的元数据语法,它是Python的一部分。所以你在那里做的一切都必须完全有效。

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

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

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

当一种暗示包含尚未定义的名称,该定义可以表示为一个字符串,以后解决。

因此,您只需在此处使用字符串'Coordinate'

相关问题