Annotes de type

Programmation orientée objet intermédiaire en Python

Jake Roach

Data Engineer

Code sans annotes de type

class Student:
    def __init__(self, name, student_id, tuition_balance):
        self.name = name
        self.student_id = student_id
        self.tuition_balance = tuition_balance

# Trying to create a class can be tricky
walker = Student("Sarah Walker", 319921, 15000)
  • student_id devrait-il être un entier ?
  • tuition_balance doit-il être un nombre à virgule flottante ou un entier ? Peut-être une chaîne ?
  • Après la création de walker, comment se rappeler de son type plus tard dans le code ?
Programmation orientée objet intermédiaire en Python

Annotes de type

Outil facultatif pour ajouter de l'information sur un objet dans le code

  • Lecture et dépannage facilités
  • Une des meilleures façons de démontrer des compétences Python de niveau entreprise
  • Non imposé par l'interpréteur
  • Mots-clés de types intégrés, bibliothèque typing, classes personnalisées
# Ajouter une annotation de type lors de la création 
# d'une variable
gpa: float = 3.92
# Ajouter une annotation de type à la définition 
# d'une fonction/méthode
def check_grades(year: str) -> List[int]:
    ...
# On peut même utiliser des classes personnalisées
students: Dict[str, Student] = {...}
Programmation orientée objet intermédiaire en Python

Annotations avec types intégrés

# Annotation de type pour une logique déclarative
name: str = "Frost"  # Avant : name = "Frost"
student_id: int = 91031367
tuition_balance: float = 17452.78
# Annotation de type pour les définitions de fonction/méthode
def get_schedule(semester: str) -> dict:
    ...
  • Utilisez la syntaxe variable: type
  • Déclaratif, signature de fonction/méthode
  • def .... () -> type: pour préciser le type de retour
Programmation orientée objet intermédiaire en Python

Bibliothèque typing

typing est une bibliothèque offrant plus d'outils pour annoter les types

  • List, Dict, Tuple
  • Indiquer le type des objets de haut niveau et des éléments
from typing import List, Dict

student_names: List[str] = ["Morgan", "Chuck", "Anna"]
student_gpas: Dict[str, float] = {
    "Casey": 3.71,
    "Sarah": 4.0
}
  • Any, Set, Iterator, Callable
Programmation orientée objet intermédiaire en Python

Annotations avec classes personnalisées

class Student:
    def __init__(self, name: str, student_id: int, tuition_balance: float) -> None:
        self.name: str = name
        self.student_id: int = student_id
        self.tuition_balance: float = tuition_balance

    def get_course(self, course_id: str) -> Course:
        ...
        return course
# Utiliser Student et Course pour annoter les types
walker: Student = Student("Sarah Walker", 319921, 15000)
data_science: Course = walker.get_course("TDM-20100")
Programmation orientée objet intermédiaire en Python

Vérifier les types d'objets

# walker: Student = Student("Sarah Walker", 319921, 15000)
print(type(walker))
<class '__main__.Student'>
# data_science: Course = walker.get_course("TDM-20100")
print(type(data_science))
<class '__main__.Course'>
Programmation orientée objet intermédiaire en Python

Passons à la pratique !

Programmation orientée objet intermédiaire en Python

Preparing Video For Download...