Résolue

Type d'annotations et validation des données

# Types natifs # Classes

Bonjour,

class Voiture:
    def __init__(self, marque:str, prix:int):
        self.marque = marque
        self.prix = prix

    def changer_prix(self, nouveau_prix:int) -> int:
            self.prix = nouveau_prix


voiture = Voiture(marque="Mazda", prix=30000)
voiture.changer_prix(35000)

En précisant les annotations de type dans ma méthode changer_prix cela n'implique-t-il pas que le prix sera forcément un nombre ?
(Le test s'assurer que le nouveaux prix sera forcément un entier ne se valide pas.)

Bonjour, les annotations de type ne sont que des indications. Elles n'empêchent pas de passer n'importe quel type à la méthode.
Il y a la fonction isinstance() pour faire des vérifications sur le type d'un objet.

Gabriel Trouvé

Mentor

Effectivement :)

par exemple, tu pourrais avoir ce genre de vérification :

def changer_prix(self, nouveau_prix: int) -> int:
    if not isinstance(nouveau_prix, int):
        raise ValueError("Le prix doit être un entier.")
    self.prix = nouveau_prix

Thierry Chappuis

Mentor

Par contre, tu as des outils comme mypy, ou alors ton éditeur de code, qui peuvent capturer l'erreur. C'est à cela que servent les annotations de type. Elles ne sont pas prévue à la base pour imposer une validation à l'exécution.

Regarde la rediffusion des derniers mentorat. Dans un de ces mentorat, celui sur les décorateurs, j'avais proposé un décorateur qui permettait de valider les types des arguments à l'exécution. Ce n'est pas nécessairement ce qu'ont cherche toutefois à obtenir systématiquement avec les annotations de type, qui doivent surtout servir à une analyse statique du code.

Thibault houdon

Mentor

La session à laquelle Thierry fait référence.

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.