Python сравнение объектов
Есть класс:
class Circle(Point):
def __init__(self, r, Point):
self.r=r
self.center=Point
def __lt__(self, other):
if self.square()<other.square():
return 'first object smaller than other'
else:
return 'first object not smaller than other'
def __eq__(self, other):
if self.square()==other.square():
return 'first object smaller than other'
def square(self):
return ((self.r**2)*math.pi)
Создаю несколько объектов этого класса c1=Circle(4, Point(1.5,1)) c2=Circle(1, Point(1,1)) c3=Circle(100, Point(1,1)). Я хочу поместить эти объекты в лист, чтобы потом выполнить сортировку этого листа (list.sort()) и вывести объекты по возрастанию, как это сделать? На данный момент cirl_1.sort() возвращает None.
Ответы (2 шт):
Автор решения: Albert
→ Ссылка
Вам не нужно присваивать list.sort() какой либо переменной, достаточной его выполнить:
c1=4
c2=3
c3=5
circle_1 = [c1, c2, c3]
print(circle_1)
circle_1.sort()
print(circle_1)
Выход:
[4, 3, 5]
[3, 4, 5]
Автор решения: ioprst
→ Ссылка
Методы сравнения должны возвращать bool, а не str.
import math
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
class Circle:
def __init__(self, r, Point):
self.r = r
self.center = Point
def __repr__(self):
return f'<Circle cx={self.center.x} cy={self.center.y} r={self.r}>'
def __lt__(self, other):
return self.square() < other.square()
def __eq__(self, other):
return self.square() == other.square()
def square(self):
return ((self.r**2)*math.pi)
c1=Circle(400, Point(1.5,1))
c2=Circle(1, Point(1,1))
c3=Circle(100, Point(1,1))
lst = [c1, c2, c3]
print(lst)
print(sorted(lst))
Результат:
[<Circle cx=1.5 cy=1 r=400>, <Circle cx=1 cy=1 r=1>, <Circle cx=1 cy=1 r=100>]
[<Circle cx=1 cy=1 r=1>, <Circle cx=1 cy=1 r=100>, <Circle cx=1.5 cy=1 r=400>]