python - 无法计算manhatan距离,TypeError

时间:2016-04-30 06:35:41

标签: python class gps

所以我有一个学校项目,我们需要为GPS系统制作一些课程。我有一个问题找出函数dist(self,other):显示在我的代码底部。项目后期的其他定义很大程度上依赖于它,但我现在很难过。 dist函数计算由实例变量 x y 定义的位置的曼哈顿距离(x1-x2)+(y1-y2),以及另一个位置其他,作为元组提供

class GPS_Location:
    def __init__(self,x,y):
        self.x=x
        self.y=y
    def __str__(self):
        return '(%s,%s)' % (self.x,self.y)
    def __repr__(self):
        return 'GPS_Location(%s,%s)' % (self.x,self.y)
   def __eq__(self,other):
        self.other = other
        if (self.x,self.y) == other:
            return True
        else:
            return False
    def dist(self,other):
        self.other = other
        return abs(self.x - (other[0])) + abs(self.y - (other[1])) #TypeError

在测试代码时,我不断收到“TypeError:'GPS_Location'对象不可迭代”。我已经尝试了很多调整,但我无法弄清楚我做错了什么。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

  1. 确保第8行缩进4个空格,就像其他方法一样。
  2. 似乎没有任何理由在otherself.other中将__eq__()分配给dist()
  3. 您可能遇到的唯一其他问题可能与您调用这些方法的方式有关(您提到参数other只是一个元组),这有效:

    x = GPS_Location(1, 1)
    x == (1, 1)
    # True
    x == (2, 2)
    # False
    x.dist((1, 1))
    # 0
    x.dist((2, 2))
    # 2
    
  4. 如果您确实需要将GPS_Location作为other参数传递给dist,则需要按如下方式更新:

    def dist(self, other):
        return abs(self.x - other.x) + abs(self.y - other.y)
    

    这样称呼:

    x = GPS_Location(1, 1)
    y = GPS_Location(2, 2)
    x.dist(y)
    # 2