Les classes
Une classe définit l'état et le comportement des objets qu'elle permet de créer. Une classe est déclarée avec le mot-clé class. Son corps est délimité par l'indentation. Voici un exemple :
class Product:
def __new__(cls, name: str, price: float):
print("Création de l'objet")
return super().__new__(cls)
def __init__(self, name: str, price: float):
self.name = name
self.price = price
def describe(self) -> str:
return f"{self.name} : {self.price:.2f} €"
Cette classe définit deux attributs d'instance nommés name et price, ainsi qu'une méthode nommée describe.
La méthode nommée __init__ initialise l'objet après sa création prise en charge par la méthode __new__ et joue un rôle comparable au constructeur en C#. En pratique, on définit généralement uniquement la méthode __init__. Définir __new__ est utile pour personnaliser la création d'objets de types immuables, comme str, int ou tuple. Python appelle __new__ pour créer l'objet, puis __init__ pour l'initialiser.
Dans l'implémentation présentée ci-dessus, la méthode __new__ peut être omise. Le paramètre cls représente la classe dont on crée une instance. Les autres paramètres correspondent aux arguments transmis lors de l'appel à la classe.
Pour la méthode __init__, le paramètre self représente l'objet créé. Les autres paramètres permettent d'initialiser ses attributs. Cette méthode ne doit retourner aucune valeur autre que None et la présence de -> None est facultative.
Pour la méthode describe, le paramètre self désigne l'instance courante, équivalent de this en C#. Cependant, il doit apparaître explicitement dans la déclaration des méthodes d'instance. Python le transmet automatiquement lors des appels des méthodes.