2013-05-22 156 views
2

我正在使用numpy模塊來檢索2d數組中的最大值的位置。但是這個2d數組由MyObjects組成。現在,我得到的錯誤:python將對象轉換爲int

TypeError: unorderable types: int() > MyObject()

我嘗試使用此代碼重寫INT功能:

def int(self): 
    return self.score 

但是,這並沒有解決我的問題。 我是否必須將MyObjects的2d數組轉換爲2d的整數數組,我是否需要擴展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'? – 2013-05-22 14:03:57

+0

如果數組的最大值不包含「float」或「int」數據類型,那麼您希望數組的最大值是多少? – danodonovan

+3

這甚至不是你想要覆蓋轉換爲整數的方式......提示:它是['__int__()'](http://docs.python.org/2/reference/datamodel.html#object.__int__) ,無論你做什麼都可能不會調用它 - 我不相信Python在比較它們時試圖將對象強制轉換爲相同的類型。 – millimoose

回答

9

嘗試在你的MyObject類定義使用

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

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

# Will output: 20 

+0

剛剛檢查過,'__int __(self)'會運作良好。使用'int(MyObject)'鑄造方法將您的對象轉換爲整數。 – Kostanos

1

max函數使用時在元件上施加一個key。這就是你把score

典型:

a = max(my_list, key=score) 
+2

這會給你一個NameError的分數。你需要使用一個getter,像'lambda s:s.score'(或'operator.attrgetter(「score」)')。 – RoadieRich