Explication de la leçon
__init__Après cette leçon, tu seras capable de :
__init__ et initialiser les attributs d'instance lors de la création d'un objet.self.Dans la leçon précédente, tu as créé une classe et rattaché des attributs après avoir construit chaque objet. Cela fonctionne, mais il est facile d'oublier un attribut. La méthode __init__ de Python initialise automatiquement une instance lorsque tu appelles sa classe :
class Task:
def __init__(self, name, owner):
self.name = name
self.owner = ownerTask("build", "Maya") construit un objet et appelle __init__ avec les arguments fournis. Python fournit self automatiquement ; tu ne le passes pas toi-même. Contrairement à un constructeur Java/C#, __init__ est une méthode d'initialisation, et elle ne renvoie normalement aucune valeur.
Les paramètres du constructeur sont des entrées temporaires. self.name et self.owner sont des attributs d'instance qui restent accessibles via l'objet. Chaque appel construit une instance distincte avec son propre état stocké.
Les valeurs par défaut de l'Unité 1 fonctionnent également dans __init__ : def __init__(self, name, retries=0): permet aux appelants d'omettre un nombre de tentatives. Place les paramètres obligatoires avant les paramètres optionnels.
class Endpoint:
def __init__(self, name, region):
self.name = name
self.region = region
endpoint = Endpoint("billing", "eu")
print(f"{endpoint.name}@{endpoint.region}")Sortie :
billing@euLes entrées du constructeur deviennent des attributs d'instance persistants.
class Deployment:
def __init__(self, tag, ready):
self.tag = tag
self.ready = ready
first = Deployment("v1.4", True)
second = Deployment("v1.5", False)
print(first.ready)
print(second.ready)Sortie :
True
FalseLe second objet n'écrase pas l'état du premier objet.
class Queue:
def __init__(self, name, pending=0):
self.name = name
self.pending = pending
normal = Queue("email")
busy = Queue("reports", 4)
print(f"{normal.name}: {normal.pending}")
print(f"{busy.name}: {busy.pending}")Sortie :
email: 0
reports: 4La valeur par défaut ne s'applique que lorsque l'appelant omet l'argument.
class Wallet:
def __init__(self, owner, balance):
self.owner = owner
self.balance = balance
def deposit(self, amount):
if amount > 0:
self.balance += amount
wallet = Wallet("Ari", 20)
wallet.deposit(7)
print(f"Balance: {wallet.balance}")Sortie :
Balance: 27Les méthodes modifient l'état initialisé à l'aide de self, et non d'une variable locale temporaire.
| Objectif | Syntaxe |
|---|---|
| Initialiser une instance | def __init__(self, name): |
| Conserver une entrée de constructeur | self.name = name |
| Créer un objet initialisé | obj = ClassName(value) |
| Fournir une valeur initiale optionnelle | def __init__(self, name, count=0): |
| Mettre à jour l'état de l'objet | self.count += amount |
name = name au lieu de self.name = name n'enregistre pas d'attribut sur l'instance.self lève AttributeError.__init__ lève un TypeError ; utilise d'autres méthodes pour renvoyer des résultats.