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>]
→ Ссылка