Anatomie d'une classe : le constructeur __init__

Programmation orientée objet en Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Méthodes et attributs

  • Les méthodes sont des définitions de fonctions dans une classe
  • self comme premier argument
  • Définir les attributs par affectation
  • Référencer les attributs dans la classe via self.___

   

class MyClass:
    # définition de fonction dans la classe
    # premier argument est self
    def my_method1(self, other_args...):
        # faire des choses ici

    def my_method2(self, my_attr):        
        # attribut créé par affectation
        self.my_attr = my_attr
        ...
Programmation orientée objet en Python

Constructeur

  • Ajouter des données à l'objet lors de sa création ?
  • Constructeur : la méthode __init__() est appelée à chaque création d'objet.
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- Crée l'attribut .name et le définit au paramètre name
        print("La méthode __init__ a été appelée")

cust = Customer("Lara de Silva") #<--- __init__ est appelée implicitement print(cust.name)
La méthode __init__ a été appelée
Lara de Silva
Programmation orientée objet en Python
class Customer:
       def __init__(self, name, balance):  # <-- paramètre balance ajouté

self.name = name self.balance = balance # <-- attribut balance ajouté print("La méthode __init__ a été appelée")
cust = Customer("Lara de Silva", 1000) # <-- __init__ est appelée print(cust.name) print(cust.balance)
La méthode __init__ a été appelée
Lara de Silva
1000
Programmation orientée objet en Python
class Customer:
       def __init__(self, name, balance=0):  #<-- valeur par défaut pour balance

self.name = name self.balance = balance print("La méthode __init__ a été appelée")
cust = Customer("Lara de Silva") # <-- ne pas spécifier balance explicitement
print(cust.name) print(cust.balance) # <-- attribut créé quand même
La méthode __init__ a été appelée
Lara de Silva
0
Programmation orientée objet en Python

Attributs dans les méthodes

class MyClass:
    def my_method1(self, attr1):
        self.attr1 = attr1
        ...

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...
obj = MyClass()
obj.my_method1(val1) # <-- attr1 créé
obj.my_method2(val2) # <-- attr2 créé

Attributs dans le constructeur

class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        ...

# Tous les attributs sont créés obj = MyClass(val1, val2)
  • plus facile de connaître tous les attributs
  • attributs créés lors de la création de l'objet
  • code plus utilisable et maintenable
Programmation orientée objet en Python

Bonnes pratiques

1. Initialiser les attributs dans __init__()
Programmation orientée objet en Python

Bonnes pratiques

1. Initialiser les attributs dans __init__()
2. Nommage

CamelCase pour les classes, lower_snake_case pour les fonctions et attributs

Programmation orientée objet en Python

Bonnes pratiques

1. Initialiser les attributs dans __init__()
2. Nommage

CamelCase pour les classes, lower_snake_case pour les fonctions et attributs

3. Garder self comme self
class MyClass:
    # Cela fonctionne mais n'est pas recommandé
    def my_method(kitty, attr):
       kitty.attr = attr
Programmation orientée objet en Python

Bonnes pratiques

1. Initialiser les attributs dans __init__()
2. Nommage

CamelCase pour les classes, lower_snake_case pour les fonctions et attributs

3. self est self
4. Utiliser des docstrings
class MyClass:
    """Cette classe ne fait rien"""
    pass
Programmation orientée objet en Python

Passons à la pratique !

Programmation orientée objet en Python

Preparing Video For Download...