Python Typing
Типизация
У каждого объекта в нашем (вашем) языке есть тип — так язык и мы понимаем с чем именно мы работаем

Виды типизации


Неявная vs Явная
Язык сам догадается или нужно обязательно помочь
# Python
a = "implicit" # сам догадается
# Java
String a = "explicit"; # надо подсказать
Динамическая vs Статическая
Когда упадёт?
# python
a = "dynamic"
a / 2 # RuntimeError
# Java
String a = "static"
a / 2 # Compile Error
Строгая vs Нестрогая
Когда упадёт?
# python
a = "strong"
print(2 + a) # TypeError
# JS
a = "weak"
console.log(2 + a) # 2weak

Утиная типизация
Кря-кря
То что крякает как утка, плавает как утка, ведёт себя как утка — утка.
Если мы делаем методы "как у числа", то мы можем работать с этим как с числом
Если мы делаем методы "как у итератора", то мы можем работать с этим как с итератором


Java vs Python
Явная строгая статическая
Java
Неявная строгая динамическая
(и утиная)
Python
Почему?
Типизация в Python
Java
Попишем на Java (я не умею)
public class API {
public User getUser(int userId) {
...
}
}
User user = API().getUser(123)
user.
Python
Попишем на python (я умею
class API:
def get_user(self, user_id):
...
user = API().get_user(123)
user.???
Прям так и живетё?
Нет
История опциональной типизации
Python Enhancement Proposals
Документы, предлагающие внесение изменение в язык и его экосистему

PEP-3107
2006 год
Аннотация функций
Ура!
def my_func(b: "can be optional") -> "ohoho TODO":
...
Аннотация функций
Ладно на самом деле ура
def my_func(b: int) -> str:
...
PEP-484
2014 год
Модуль typing и ТИПИЗАЦИЯ
Ну наконец-то
from typing import Union, Optional
def my_func(b: Union[int, float]) -> Optional[str]:
...
my_func("aaa") # Mypy checker
PEP-526
2016 год
Аннотация переменных
Не хватало
user_id: int = 58
user: User = API().get_user(user_id)
В питоне опциональная статическая типизация!
Нет
mypy
mypy
Тайп-чекер, который использует аннотации в вашем коде и выдаёт ошибку, если что-то не так:
- Существует только не в рантайме
- Работает опционально :)
- Активно развивается
- Медленный

В питоне можно писать типо-безопасный код!
Нет
Выводы
Гибкость языка это круто
если это не javascript
Конец?
Нет
Cindicator — круто
у нас всё типизировано
(и есть вакансия стажёра-аналитика)
PiterPy Meetup — круто
мы делаем интересные митапы про разработку
(приходите, у нас джависты выступают)
Бонч-хакатон — круто
приходите, если есть желание с увлечением провести выходные
РИТ — круто
промокод, дающий скидку в 75% Academic{PiterPyMeetup}
Теперь да
[polytech] Python Typing
By b0g3r
[polytech] Python Typing
- 120