Notions de base de la programmation orientée objet

Programmation orientée objet intermédiaire en Python

Jake Roach

Data Engineer

Définir une classe

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

# This invokes a call to __init__
john = Person("John Casey", 38)
  • Définissez une classe avec le mot-clé class
  • __init__ est le constructeur, appelé lors de la création d'un nouvel objet de classe
  • self renvoie à l'instance courante de la classe
Programmation orientée objet intermédiaire en Python

Attributs d'instance

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age
# Create an instance of Person
sarah = Person("Sarah Walker", 31)
sarah.age  # Retrieve the age instance attribute
  • Associés à un objet d'une classe
  • Se définissent et se lisent avec la syntaxe self.<attribute-name>
  • S'accèdent via <object-name>.<attribute-name>
Programmation orientée objet intermédiaire en Python

Attributs de classe

  • Liés à la classe elle-même
  • Se consultent sans objet de la classe
  • Stockent des données identiques pour tous les objets de la classe
class Person:
  residence = "Planet Earth"
  ...
# Accessed without an instance
print(Person.residence)
Planet Earth
Programmation orientée objet intermédiaire en Python

Méthodes d'instance

class Person:
  ...
  def introduce(self):
      print(f"Hello, my name is {self.name}")
chuck = Person("Chuck", 32)
chuck.introduce()  # Called on a Person object

$$

  • Nécessitent un objet de la classe pour être appelées
  • Prennent self comme premier paramètre
Programmation orientée objet intermédiaire en Python

Méthodes de classe

class Person:
  @classmethod
  def wake_up(cls):
      print("Time to start your day!")
# Calling a class method
Person.wake_up()

$$

  • Décorées avec @classmethod
  • Ne nécessitent pas d'objet de la classe pour être appelées
Programmation orientée objet intermédiaire en Python

Héritage

L'héritage permet de réutiliser du code entre classes

  • La classe enfant (Employee) hérite de toute la fonctionnalité de la classe parente (Person)
  • Relation « est un »
  • Peut ajouter de la fonctionnalité
    • Attributs
    • Méthodes
class Person:
  def __init__(self, name, age):
    self.name
    self.age = age

  def introduce(self):
      print(f"Hello, my name is {self.name}")
class Employee(Person):
  def __init__(self, name, age, title):
    Person.__init__(self, name, age)
    self.title = title

  def change_position(self, new_title):
      self.title = new_title
Programmation orientée objet intermédiaire en Python

Héritage

lester = Employee("Lester", 26, "Technician")
lester.introduce()  # Inherited from Person
print(lester.title)
Hello, my name is Lester
Technician
lester.change_position("Cashier")
print(lester.title)
Cashier
Programmation orientée objet intermédiaire en Python

super()

class Employee(Person):
  def __init__(self, name, age, title):
    # Uses name of the parent class
    Person.__init__(self, name, age)

    self.title = title
  ...
  • Nom de la classe, __init__()

Utiliser super()

class Employee(Person):
  def __init__(self, name, age, title):
    # super(), plutôt que le nom de la classe
    super().__init__(name, age)

    self.title = title
  ...
  • super(), __init__()
  • Pas besoin de passer self
Programmation orientée objet intermédiaire en Python

Redéfinition (override)

La classe enfant implémente une méthode héritée du parent d'une nouvelle façon

class Employee(Person):
  ...
  def introduce(self):
      print(f"""My name is {self.name},
        I am a {self.title}""")
lester = Employee("Lester", 26, "Technician")
lester.introduce()
My name is Lester, I am a Technician
Programmation orientée objet intermédiaire en Python

Surcharge d'opérateurs

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

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

$$

  • Personnaliser le comportement des opérateurs Python pour une classe
  • __eq__() sert à surcharger ==

$$

$$

$$

$$

# Compare two Person objects
chuck = Person("Charles Carmichael")
charles = Person("Charles Carmichael")
print(chuck == charles)
True
Programmation orientée objet intermédiaire en Python

Passons à la pratique !

Programmation orientée objet intermédiaire en Python

Preparing Video For Download...