Ответ 1
Если вы хотите сравнить объекты по id:
class practice:
id = None
def __init__(self,id):
self.id = id
def __lt__(self, other):
return other.id > self.id
def __gt__(self, other):
return self.id > other.id
unique_list = list()
for item in x:
if sorted(item) not in unique_list:
unique_list.append(sorted(item))
print(unique_list)
[[<__main__.practice object at 0x7fe87e717c88>, <__main__.practice object at 0x7fe87e717cc0>],
[<__main__.practice object at 0x7fe86f5f79e8>, <__main__.practice object at 0x7fe86f589278>],
[<__main__.practice object at 0x7fe86f589be0>, <__main__.practice object at 0x7fe86f589c18>]]
В зависимости от функциональности, которую вы хотите реализовать во всех богатых методах упорядочения сравнения, вы можете использовать functools.total_ordering, вам просто нужно определить один из методов, и он позаботится об остальном
from functools import total_ordering
@total_ordering
class practice:
id = None
def __init__(self,id):
self.id = id
def __lt__(self, other):
return other.id > self.id
def __eq__(self, other):
return self.id == other.id
Учитывая класс, определяющий один или несколько методов упорядочения сравнения, этот декоратор класса предоставляет остальное. Это упрощает работу, связанную с определением всех возможных операций с богатым сопоставлением:
Класс должен определять один из
__lt__()
,__le__()
,__gt__()
или__ge__()
. Кроме того, класс должен предоставить метод__eq__()
.