Classes & Instances

 

Moyen

Les classes nous permettent d’organiser nos fonctions/données de manière à pouvoir les réutiliser plus facilement dans le futur.

A savoir:
- Fonctions qui appartienent à une classe => méthodes .
- Variables qui appartienent à une classe => attributs .

Imaginons que vous souhaitez constituer un profil pour chacun de vos employés (prénom, nom, mail …). Cela revient donc à créer un espèce de moule où seul le prénom, nom, mail changeront pour chaque employé.

Les classes seront donc votre meilleur ami !
Créons la class Employee:
class Employee:
>>>
File "<ipython-input-1-80b16634c775>", line 1
    class Employee:                   ^
SyntaxError: unexpected EOF while parsingé
Si nous exécutons la ligne d'au-dessus, nous obtiendrons une erreur. Pour cela nous devons ajouter le mot-clef "pass"
class Employee:
    pass
Désormais, nous avons une classe vide. Elle ne contient ni attributs, ni méthodes.
Créons 2 employés, on dit qu'on instancie 2 employés.
emp_1 = Employee() 
emp_2 = Employee()
emp_1 et emp_2 sont des instances de notre classe Employee.
Ils sont considés comme des objets.
print(emp_1)
print(emp_2)
>>>
<__main__.Employee object at 0x7f67a4321dd8>
<__main__.Employee object at 0x7f67a4321da0>
Comme vous pouvez le voir, ce sont bien des objets et ils sont uniques.
Puisque qu'un employé possède forcément un prénom, nom et un mail, allons les leur créer !
emp_1.firstname = 'Ferdinand'
emp_1.lastname = 'Mom'
emp_1.email = 'ferdinand.mom@company.com'

emp_2.firstname = 'Kevin'
emp_2.lastname = 'Kakao'
emp_2.email = 'kevin.kakao@company.com'
Affichons leur mail !
print(emp_1.email)
print(emp_2.email)
>>> 
ferdinand.mom@company.com
kevin.kakao@company.com
Imaginons que nous avons des centaines d'employés ! Nous n'allons tout de même pas définir à la main leur prénom, nom et mail ?
Nous devons trouver un moyen de tout créer en une seule fois.
class Employee:
    #Constructor
    def __init__(self, firstname, lastname):        
        #Attributs
        self.firstname = firstname
        self.lastname = lastname
        self.email  = firstname + '.' + lastname + '@company.com'

#Instanciation
emp_1 = Employee('ferdinand', 'mom')
emp_2 = Employee('kevin', 'kakao')

print(emp_1.email)
print(emp_2.email)
>>>
ferdinand.mom@company.com
kevin.kakao@company.com
Il y a beaucoup à dire ici:
- __init__() est appelé le "constructeur" . C'est une méthode qui va nous permettre de créer les objets (le moule).

- Voir self comme un moyen de récupérer le nom de l'objet concerné. Par exemple, si nous créons un objet appelé "emp_1", self sera en réalité "emp_1".

- Lorsqu'on crée un objet, le constructeur __init__() est automatiquement appelé.
Remarque:
Lors de l'instanciation , il ne faut pas ajouter self en tant qu'argument.
Supposons désormais que nous voulons afficher le prénom et le nom de chaque employé.
Pour cela, nous allons créer une méthode.
class Employee:
    #Constructeur
    def __init__(self, firstname, lastname):
        #Attributs
        self.firstname = firstname
        self.lastname = lastname
        self.email  = firstname + '.' + lastname + '@company.com'
    
    #Méthodes
    def fullname(self):
        return self.firstname  + ' ' + self.lastname

emp_1 = Employee('ferdinand', 'mom')
emp_2 = Employee('kevin', 'kakao')

print(emp_1.fullname())
print(emp_2.fullname())        
>>> 
ferdinand mom
kevin kakao

Pour résumer:

- Employee est une classe.
- Les fonctions qui appartienent à la classe => méthodes.
- Les variables qui appartienent à la classe => attributs.
- __init__() est appelé le "constructeur". Il sert à créer des instances d'Employee .
- Le processus de création s'appele l'instanciation.