Підказки типів

Середній рівень об'єктно-орієнтованого програмування в Python

Jake Roach

Data Engineer

Код без підказок типів

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

# Створювати клас може бути непросто
walker = Student("Sarah Walker", 319921, 15000)
  • student_id має бути цілим числом?
  • tuition_balance має бути float чи цілим? Може, рядком?
  • Після створення walker як запам'ятати його тип далі в коді?
Середній рівень об'єктно-орієнтованого програмування в Python

Підказки типів

Необов'язковий інструмент, що додає в код інформацію про об'єкти

  • Простіше читати й налагоджувати
  • Одна з найкращих ознак професійних навичок у Python
  • Інтерпретатор не примушує дотримуватись
  • Вбудовані типи, бібліотека typing, власні класи
# Додавайте підказку типу під час створення 
# змінної
gpa: float = 3.92
# Додавайте підказки типів у визначення 
# функцій/методів
def check_grades(year: str) -> List[int]:
    ...
# Можна використовувати й власні класи
students: Dict[str, Student] = {...}
Середній рівень об'єктно-орієнтованого програмування в Python

Підказки типів із вбудованими ключовими словами

# Підказки типів для декларативної логіки
name: str = "Frost"  # Раніше: name = "Frost"
student_id: int = 91031367
tuition_balance: float = 17452.78
# Підказки типів у визначеннях функцій/методів
def get_schedule(semester: str) -> dict:
    ...
  • Використовуйте синтаксис variable: type
  • Декларативність, сигнатура функції/методу
  • def .... () -> type: щоб задати тип повернення
Середній рівень об'єктно-орієнтованого програмування в Python

Бібліотека typing

typing — бібліотека, що надає більше інструментів для підказок типів

  • List, Dict, Tuple
  • Підказуйте типи верхнього рівня та елементи об'єктів
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
Середній рівень об'єктно-орієнтованого програмування в Python

Підказки типів із власними класами

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
# Використовуйте Student і Course для підказок типів
walker: Student = Student("Sarah Walker", 319921, 15000)
data_science: Course = walker.get_course("TDM-20100")
Середній рівень об'єктно-орієнтованого програмування в Python

Перевірка типів об'єктів

# 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'>
Середній рівень об'єктно-орієнтованого програмування в Python

Давайте потренуємось!

Середній рівень об'єктно-орієнтованого програмування в Python

Preparing Video For Download...