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 fonctions définies dans une classe
  • self comme premier argument
  • Définir les attributs par affectation
  • Référer aux attributs dans la classe via self.___

   

class MyClass:
    # définition de fonction dans une classe
    # le premier argument est self
    def my_method1(self, other_args...):
        # logique 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 ?
  • Le constructeur __init__() est appelé chaque fois qu'un objet est créé.
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- Crée l'attribut .name et le définit avec le paramètre name
        print("The __init__ method was called")

cust = Customer("Lara de Silva") #<--- __init__ est appelé implicitement print(cust.name)
The __init__ method was called
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("The __init__ method was called")
cust = Customer("Lara de Silva", 1000) # <-- __init__ est appelé print(cust.name) print(cust.balance)
The __init__ method was called
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("The __init__ method was called")
cust = Customer("Lara de Silva") # <-- ne pas préciser balance
print(cust.name) print(cust.balance) # <-- l'attribut est tout de même créé
The __init__ method was called
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
  • les attributs sont créés à l'instanciation
  • 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 les attributs

Programmation orientée objet en Python

Bonnes pratiques

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

CamelCase pour la classe, lower_snake_case pour les fonctions et les 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 la classe, lower_snake_case pour les fonctions et les 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...