Surcharge des opérateurs Python

Programmation orientée objet intermédiaire en Python

Jake Roach

Data Engineer

Surcharge des opérateurs de comparaison

class Person:
  def __init__(self, name):
      self.name = name

  def __eq__(self, other):
      return self.name == other.name

Personnaliser le comportement de ==

  • Utilisez la méthode magique __eq__()
  • Prend self et other
  • Retourne un booléen
bryce = Person("Bryce")
orion = Person("Orion")
print(bryce == orion)
False
chuck = Person("Charles Carmichael")
charles = Person("Charles Carmichael")
print(chuck == charles)
True
Programmation orientée objet intermédiaire en Python

Additionner deux objets

class Team:
  def __init__(self, team_members):
      self.team_members = team_members

# Créez deux objets Team, tentez de les additionner
rookies = Team(["Casey", "Emmitt"])
veterans = Team(["Mike", "Chuck"])
dream_team = rookies + veterans
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
TypeError: unsupported operand type(s) for +: 'Team' and 'Team'
Programmation orientée objet intermédiaire en Python

Surcharger l'opérateur +

class Team:
  def __init__(self, team_members):
    # team_members est une liste de noms
    self.team_members = team_members

  def __add__(self, other):
    # Additionner des Team crée une Team plus grande
    return Team(self.team_members + other.team_members)
  • Utilisez la méthode magique __add__() pour surcharger +
  • self et other sont passés à __add__()
  • Créez une nouvelle Team à partir des team_members des objets « additionnés »
Programmation orientée objet intermédiaire en Python

Additionner deux objets

# Créez deux objets Team
rookies = Team(["Casey", "Emmitt"])
veterans = Team(["Mike", "Chuck"])

# Tentez de les additionner pour former une équipe
dream_team = rookies + veterans
print(type(dream_team))
print(dream_team.team_members)
Team
["Casey", "Emmitt", "Mike", "Chuck"]
Programmation orientée objet intermédiaire en Python

Utiliser + pour créer un nouvel objet

class Team:
  def __init__(self, team_members):
      self.team_members = team_members

class Employee:
  def __init__(self, name, title):
    self.name = name
    self.title = title

  def __add__(self, other):
    # Utilisez l'opérateur + pour créer une
    # Team avec le nom de chaque Employee
    return Team([self.name, other.name])

Et si l'on veut créer une Team en combinant des objets Employee ?

  • __add__ est implémenté dans la classe Employee
  • Crée un nouvel objet Team à partir d'une liste de noms d'Employee
  • Le résultat de l'addition de deux Employee est une seule Team
Programmation orientée objet intermédiaire en Python

Additionner deux objets pour en créer un nouveau

# Créez deux objets Employee
anna = Employee("Anna", "Technical Specialist")
jeff = Employee("Jeffrey", "Musician")

# Additionnez-les pour créer une équipe
audio_team = anna + jeff
print(type(audio_team))
print(audio_team.team_members)
Team
["Anna", "Jeffrey"]
Programmation orientée objet intermédiaire en Python

Surcharger d'autres opérateurs

Opérateur Méthode magique Type d'opérateur
- __sub__ Arithmétique
!= __ne__ Comparaison
< __lt__ Comparaison
> __gt__ Comparaison
+= __iadd__ Affectation
and __and__ Logique
in __contains__ Appartenance
is __is__ Identité

 

 

 

 

 

 

 

… et bien d'autres encore !

Programmation orientée objet intermédiaire en Python

Passons à la pratique !

Programmation orientée objet intermédiaire en Python

Preparing Video For Download...