首页 > 解决方案 > TypeError: 不支持的操作数类型 -: 'Position' 和 'Position'

问题描述

假设我有课

class Position():
    def __init__(self, line, column):
        self.line = line
        self.column = column

我已经创建了delta,但类型的对象Position不能用作参数。

delta = lambda position1, position2 : tuple(np.abs(np.subtract(position1, position2)))

假设position1 = Position(1,2)position2 = Position(5,6)。有没有办法在delta(position1, position2)不产生错误的情况下运行?

标签: pythonpython-3.xnumpy

解决方案


您将不得不在您的课程中创建一个__sub____abs__魔术方法。此外,如果您想使用 and 的数组position1position2您还必须实现一个__array_wrap__魔术方法。

另外,我觉得这里的使用不是tuple很合适。如果您也想使用它,则必须更改类的实现Position并返回一个Sequence对象。

class Position:
    def __init__(self, a, b): 
        self.a, self.b = a, b

    def __sub__(self, other):
        return Position(self.a - other.a, self.b - other.b)

    def __abs__(self):
        return Position(abs(self.a), abs(self.b))

推荐阅读