Accueil/Informatique & Développement /Chapitre 08 /Fiche de révision

Python — POO

Recto-verso. À relire la veille. Le cours · Les exercices

Le vocabulaire

Classele plan
Objet / instanceune réalisation
Attributune caractéristique
Méthodeune action

Classe → majuscule : Personne, Equipement.

La structure

python
class Voiture:
    nombre = 0        # de CLASSE

    def __init__(self, marque):
        self.marque = marque   # d'INSTANCE

    def rouler(self):
        print(self.marque)

⚡ self

Il se déclare dans chaque méthode, mais ne se passe jamais à l'appel.

python
def afficher(self):   # déclaré
v.afficher()          # PAS passé

Oublié → takes 0 positional arguments but 1 was given

Constructeur / destructeur

__init__à la création
__del__à la destruction

__del__, et non __def__.

Encapsulation

nompublic
_nomprotégé (interne)
__nomprivé

Une convention, pas une serrure : __nom devient _Classe__nom (name mangling).

Getter / setter

python
def get_age(self):
    return self.__age

def set_age(self, a):
    if a >= 0:
        self.__age = a
    else:
        print("Âge invalide")

Le setter contrôle — sinon il ne sert à rien.

@property

python
@property
def age(self):
    return self.__age

@age.setter
def age(self, v):
    if v >= 0:
        self.__age = v

p.age = 35     # appelle le setter
print(p.age)   # appelle le getter

La forme moderne : syntaxe d'attribut, contrôle de méthode.

Héritage

python
class Serveur(Equipement):
    def __init__(self, ip, os):
        super().__init__(ip)
        self.os = os

La fille reçoit attributs et méthodes de la mère.

⚡ super().__init__()

Dès que la fille a son propre __init__, il remplace celui de la mère.

Sans l'appel, les attributs de la mère n'existent pas → AttributeError: '_Classe__x'

1ʳᵉ ligne du constructeur d'une fille :
super().__init__(…)

Override

python
class Admin(Utilisateur):
    def se_connecter(self):
        super().se_connecter()   # le comportement mère
        print("+ privilèges")    # puis le sien

Même nom de méthode = redéfinition.

Décoder les erreurs

takes 0 arguments but 1self oublié
no attribute '_Classe__x'super().__init__() oublié
no attribute '__x'privé lu de l'extérieur

Le réflexe

Qui peut modifier cette donnée, et sous quelles conditions ?

« N'importe qui, n'importe comment » → attribut privé + setter qui contrôle.

Et une classe passe par ses propres getters, pas par l'attribut brut.