11.3 Méthodes d'instance
Objectifs d'apprentissage
À la fin de cette section, vous devriez être en mesure de :
- Créer et implémenter
__init__()avec plusieurs paramètres, y compris des valeurs de paramètre par défaut. - Décrire à quelles informations une méthode d'instance a accès et ce qu'elle peut modifier.
En savoir plus sur __init__()
En Python, __init__() est la méthode spéciale qui crée les instances. __init__() doit avoir l'instance appelante, self, comme premier paramètre et peut comporter n'importe quel nombre d'autres paramètres, avec ou sans valeurs par défaut.
Concepts en pratique
Définition et utilisation de __init__() avec des paramètres
Considérez l'exemple ci-dessus.
Méthodes d'instance
Une méthode d'instance (instance method) est utilisée pour accéder aux attributs d'instance ainsi qu'aux attributs de classe, et pour les modifier. Toutes les méthodes présentées jusqu'à présent, et la plupart des méthodes définies dans une définition de classe, sont des méthodes d'instance.
Exemple 11.1
Les méthodes d'instance sont souvent utilisées pour obtenir et définir les informations d'une instance
class ProductionCar:
def __init__(self, make, model, year, max_mph = 0.0):
self.make = make
self.model = model
self.year = year
self.max_mph = max_mph
def max_kmh(self):
return self.max_mph * 1.609344
def update_max(self, speed):
self.max_mph = speed
car_1 = ProductionCar('McLaren', 'Speedtail', 2020) # car_1.max_mph is 0.0
car_1.update_max(250.0) # car_1.max_mph is 250.0
print(car_1.make, car_1.model, 'reaches', car_1.max_mph, 'mph (',
car_1.max_kmh(), 'km/h)') # Prints McLaren Speedtail reaches 250.0 mph (402.336 km/h)
Concepts en pratique
Méthodes d'instance de CoffeeOrder
Considérez l'exemple ci-dessous :
class CoffeeOrder:
loc = 'Cafe Coffee'
cls_id = 1
def __init__(self, size=16, milk=False, sugar=False):
self.order_id = CoffeeOrder.cls_id
self.cup_size = size
self.with_milk = milk
self.with_sugar = sugar
CoffeeOrder.cls_id += 1
def change(self, milk, sugar):
self.with_milk = milk
self.with_sugar = sugar
def print_order(self):
print(CoffeeOrder.loc,'Order', self.order_id, ':', self.cup_size, 'oz')
if self.with_milk:
print('\twith milk')
if self.with_sugar:
print('\twith sugar')
order_1 = CoffeeOrder(8)
order_2 = CoffeeOrder(8, True, False)
order_1.change(False, True)
À vous d'essayer
Création d'une classe pour des distributeurs automatiques
Écrivez une classe, VendingMachine, comme décrit ci-dessous. Les valeurs par défaut suivent les attributs. Ex. : la valeur par défaut de count' est 0. Créez un distributeur automatique à l'aide d'une valeur lue depuis l'entrée et appelez les méthodes d'instance.
Attributs d'instance :
- count: 0
- max: 0
Méthodes :
__init__(num): initialise count et max avec le paramètrenumrefill(): affecte àcountla valeur demax'et affiche"Refilled"sell(order): affecte àcountla valeur decountmoinsorderet affiche"Sold: [order]"print_stock(): affiche"Current stock: [count]"
Étant donné l'entrée :
100
25
La sortie est :
Current stock: 100
Sold: 25
Current stock: 75
Refilled
Current stock: 100