2013-05-22 7 views
2

Я использую модуль numpy для получения положения максимального значения в массиве 2d. Но этот 2d-массив состоит из MyObjects. Теперь я получаю ошибку:python cast object to int

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

Я попытался переопределить функцию ИНТ с этим кодом:

def int(self): 
    return self.score 

Но это не решает мою проблему. Должен ли я преобразовать свой 2d массив MyObjects в 2d массив целых чисел, мне нужно расширить объект Integer (если это возможно в python) или я могу переопределить эту функцию int() по-другому?

[EDIT]

Полный объект:

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'? –

+0

Что вы ожидаете от максимального значения вашего массива, если оно не содержит типов данных 'float' или' int'? – danodonovan

+3

Это даже не то, как вы должны переопределить преобразование в целое ... Подсказка: это ['__int__()'] (http://docs.python.org/2/reference/datamodel.html#object.__int__) , и все, что вы делаете, вероятно, не собирается называть его в любом случае - я не считаю, что Python пытается принуждать объекты к одному и тому же типу при их сравнении. – millimoose

ответ

9

Попробуйте использовать

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

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

# Will output: 20 

в определении вашего класса MyObject.

+0

Только что проверено, '__int __ (self)' будет работать хорошо. используйте метод 'int (MyObject)' casting для преобразования вашего объекта в integer. – Kostanos

1

max функция принимает key, который наносится на элементы. вот где вы положили score

Как правило:

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

Это даст вам имя на счету. Вам нужно использовать getter, что-то вроде 'lambda s: s.score' (или' operator.attrgetter («score»)). – RoadieRich