Méthodes de comparaison personnalisées
Introduction aux comparaisons personnalisées
Les méthodes de comparaison personnalisées vous permettent de définir comment les objets de vos propres classes doivent être comparés, offrant un contrôle précis sur les relations entre les objets.
Méthodes de comparaison spéciales
Méthode |
Description |
Opérateur de comparaison |
__eq__() |
Définit la comparaison d'égalité |
== |
__ne__() |
Définit la comparaison d'inégalité |
!= |
__lt__() |
Définit la comparaison inférieure |
< |
__le__() |
Définit la comparaison inférieure ou égale |
<= |
__gt__() |
Définit la comparaison supérieure |
> |
__ge__() |
Définit la comparaison supérieure ou égale |
>= |
Exemple d'implémentation
class Student:
def __init__(self, name, grade):
self.name = name
self.grade = grade
def __eq__(self, other):
return self.grade == other.grade
def __lt__(self, other):
return self.grade < other.grade
## Usage
student1 = Student("Alice", 85)
student2 = Student("Bob", 90)
student3 = Student("Charlie", 85)
print(student1 == student3) ## True
print(student1 < student2) ## True
Flux de comparaison
graph TD
A[Custom Comparison] --> B{Comparison Method}
B --> |__eq__| C[Equality Check]
B --> |__lt__| D[Less Than Check]
B --> |__gt__| E[Greater Than Check]
Décorateur de tri total
from functools import total_ordering
@total_ordering
class Product:
def __init__(self, price):
self.price = price
def __eq__(self, other):
return self.price == other.price
def __lt__(self, other):
return self.price < other.price
## Automatically generates other comparison methods
product1 = Product(100)
product2 = Product(200)
Bonnes pratiques
- Implémentez les méthodes de comparaison de manière cohérente
- Tenez compte des implications sur les performances
- Utilisez
@total_ordering
pour des comparaisons complètes
Conseil LabEx
Chez LabEx, nous recommandons de maîtriser les méthodes de comparaison personnalisées pour créer des classes Python plus intelligentes et flexibles.
Techniques avancées
Comparaison d'objets complexes
class ComplexObject:
def __init__(self, value1, value2):
self.value1 = value1
self.value2 = value2
def __eq__(self, other):
return (self.value1 == other.value1 and
self.value2 == other.value2)
- Les méthodes de comparaison personnalisées peuvent avoir un impact sur les performances
- Utilisez les méthodes intégrées lorsque cela est possible
- Optimisez soigneusement les comparaisons complexes