Python将对象转换为整数

7

我正在使用numpy模块来检索2d数组中最大值的位置。但是这个2d数组由MyObjects组成。现在我会收到以下错误:

TypeError:不可排序类型:int() > MyObject()

我尝试使用以下代码重写int函数:

def int(self):
    return self.score

但这并没有解决我的问题。我需要将MyObjects的二维数组转换为整数的二维数组,我需要扩展Integer对象(如果在Python中可能的话),或者我可以以另一种方式重写int()函数?
[编辑] 完整的对象:
class MyObject:
def __init__(self, x, y, score, direction, match):
    self.x = x
    self.y = y
    self.score = score
    self.direction = direction
    self.match = match

def __str__(self):
    return str(self.score)

def int(self):
    return self.score

我称呼这个对象的方式:

 def traceBack(self):
    self.matrix = np.array(self.matrix)
    maxIndex = self.matrix.argmax()
    print(self.matrix.unravel_index(maxIndex))

1
请将所有相关代码发布在 MyObject 中,这样您将更容易获得帮助。self.score 是什么? - user2032433
如果您的数组不包含“float”或“int”数据类型,那么您期望它的最大值是多少? - danodonovan
3
这甚至不是覆盖转换为整数的正确方式……提示:正确的方法是 __int__(),而你正在做的无论如何也不会调用它——我不相信Python会在比较对象时试图强制将它们转换为同一类型。 - millimoose
1
"str(self.score)" 不是整数... - njzk2
2个回答

18

尝试使用

...
def __int__(self):
    return self.score
...

test = MyObject(0, 0, 10, 0, 0)
print 10+int(test)

# Will output: 20

在你的MyObject类定义中。


1
刚刚检查了一下,__int__(self) 可以很好地工作。使用 int(MyObject) 强制转换方法将您的对象转换为整数。 - Kostanos

1
“max”函数接受一个应用于元素的“key”,在这里您需要放置“score”。通常情况下:
a = max(my_list, key=score)

2
这将在score上给你一个NameError。你需要使用getter,例如lambda s: s.score(或operator.attrgetter("score"))。 - RoadieRich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接