Как уже упоминалось @ juanpa.arrivillaga, ваши __lt__
и __eq__
были сломаны. Я только что исправил __lt__
и удалил __eq__
, думаю, это то, что вы намеревались сделать.
Кроме того, вы сортируете список массивов, а не ваш BuildingPoint
объект. Я исправил __init__
, чтобы создать BuildingPoint
из массива. И наконец, я добавил __repr__
метод, чтобы иметь возможность отображать объект.
Я не уверен, что вы хотите это сделать, вот что я сделал:
from functools import total_ordering
@total_ordering
class BuildingPoint(object):
def __init__(self,x,h,start):
self.x = x
self.height = h
self.is_start = start
def __repr__(self):
return "[{},{},{}]".format(self.x,self.height,self.is_start)
def __lt__(self, other):
if self.x != other.x:
return self.x < other.x
else:
if self.is_start and other.is_start:
return self.height > other.height
else:
return self.height < other.height
building_points = [ BuildingPoint(*array) for array in [[0, 2, True], [1, 2, False], [0, 3, True], [2, 3, False]]]
sorted(building_points)
Выход:
[[0,3,True], [0,2,True], [1,2,False], [2,3,False]]