Méthodes d'instance

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.

Faites le point

Création d'instances de signes vitaux d'un patient

Concepts en pratique

Définition et utilisation de __init__() avec des paramètres

Considérez l'exemple ci-dessus.

1.
Supposez que le programmeur veuille faire de la tension artérielle un paramètre obligatoire dans __init__(). Quel est l'en-tête de méthode __init__() correct ?
  1. def __init__(p_id, bp, self, tmp=-1.0, hr=-1, rr=-1):
  2. def __init__(self, p_id, bp, tmp=-1.0, hr=-1, rr=-1):
  3. def __init__(self, p_id, bp=[-1,-1], tmp=-1.0, hr=-1, rr=-1):
2.
Quel est l'appel correct à __init__() pour créer une instance avec p_id=5241 ?
  1. patient_10 = Vitals(self, 5241)
  2. patient_10 = Vitals(5241)
  3. les deux
3.
Supposez qu'une autre définition de __init__() soit ajoutée après la première avec l'en-tête suivant :
def __init__(self, p_id, bp, tmp, hr, rr)
Quel est l'impact sur le programme ?
  1. aucun changement.
  2. La seconde définition de __init__() génère une erreur.
  3. Les deux premiers appels à __init__() génèrent une erreur.

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)
  
4.
Que représente order_1 à la fin du programme ?
  1. 8 oz de café
  2. 8 oz de café avec lait
  3. 8 oz de café avec sucre
5.
Pourquoi change() est-elle une méthode d'instance ?
  1. peut modifier des attributs
  2. a plusieurs paramètres
  3. peut modifier une instance
6.
print_order() peut-elle être désindentée ?
  1. oui
  2. non

À 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ètre num
  • refill() : affecte à count la valeur de max' et affiche "Refilled"
  • sell(order) : affecte à count la valeur de count moins order et 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