3.2 Attributs et Méthodes : Aller plus loin

Une classe peut posséder des variables partagées par tous (Attributs de classe) ou spécifiques à chacun (Attributs d'instance).

1. Variables de classe vs Instance

class Robot:
    origine = "Usine Matrix" # Partagé par TOUS les robots

    def __init__(self, modele):
        self.modele = modele # Spécifique à CE robot

r1 = Robot("T-800")
r2 = Robot("R2D2")

print(r1.origine) # Usine Matrix
print(r2.origine) # Usine Matrix

2. Méthodes spéciales : __str__ et __repr__

Comment afficher proprement un objet ? Par défaut, Python affiche une adresse mémoire illisible. Les "Dunder Methods" (Double Underscore) permettent de personnaliser cela.

class Composant:
    def __init__(self, nom, version):
        self.nom = nom
        self.version = version

    def __str__(self):
        # Pour l'utilisateur final (print)
        return f"{self.nom} (v{self.version})"

    def __repr__(self):
        # Pour le débogage : non-ambigu, idéalement reproductible
        return f"Composant(nom='{self.nom}', version='{self.version}')"

lib = Composant("requests", "2.28.1")
print(lib)        # requests (v2.28.1)
print(repr(lib))  # Composant(nom='requests', version='2.28.1')

__repr__ est affichĂ© automatiquement dans le shell interactif et dans les logs — pratique pour dĂ©boguer sans perdre d'information.

En php, l'équivalent de __str__ : __toString()

3. Comparer des objets : __eq__

Par défaut, == compare les identités mémoire (comme === sur les objets en PHP). __eq__ permet de définir ce que signifie "égal" pour ta classe.

class Composant:
    def __init__(self, nom, version):
        self.nom = nom
        self.version = version

    def __eq__(self, other):
        return self.nom == other.nom and self.version == other.version

a = Composant("requests", "2.28.1")
b = Composant("requests", "2.28.1")
c = Composant("flask", "3.0.0")

print(a == b)  # True  — mĂȘme nom et version
print(a == c)  # False

Sans __eq__, a == b aurait retourné False car ce sont deux objets distincts en mémoire.

4. Méthodes statiques (@staticmethod)

Parfois, une classe a besoin d'une fonction utilitaire qui n'utilise ni self ni cls. C'est l'équivalent des méthodes statiques en PHP.

class Tools:
    @staticmethod
    def clean_name(name):
        return name.strip().lower()

print(Tools.clean_name("  PyThon  ")) # python
Chapitre précédent Chapitre suivant : Modélisation du Projet