У каждого объекта в нашем (вашем) языке есть тип — так язык и мы понимаем с чем именно мы работаем
Язык сам догадается или нужно обязательно помочь
# Python
a = "implicit" # сам догадается
# Java
String a = "explicit"; # надо подсказать
Когда упадёт?
# python
a = "dynamic"
a / 2 # RuntimeError
# Java
String a = "static"
a / 2 # Compile Error
Когда упадёт?
# python
a = "strong"
print(2 + a) # TypeError
# JS
a = "weak"
console.log(2 + a) # 2weak
То что крякает как утка, плавает как утка, ведёт себя как утка — утка.
Если мы делаем методы "как у числа", то мы можем работать с этим как с числом
Если мы делаем методы "как у итератора", то мы можем работать с этим как с итератором
(и утиная)
Попишем на Java (я не умею)
public class API {
public User getUser(int userId) {
...
}
}
User user = API().getUser(123)
user.
Попишем на python (я умею
class API:
def get_user(self, user_id):
...
user = API().get_user(123)
user.???
Документы, предлагающие внесение изменение в язык и его экосистему
Ура!
def my_func(b: "can be optional") -> "ohoho TODO":
...
Ладно на самом деле ура
def my_func(b: int) -> str:
...
Ну наконец-то
from typing import Union, Optional
def my_func(b: Union[int, float]) -> Optional[str]:
...
my_func("aaa") # Mypy checker
Не хватало
user_id: int = 58
user: User = API().get_user(user_id)
Тайп-чекер, который использует аннотации в вашем коде и выдаёт ошибку, если что-то не так:
если это не javascript
у нас всё типизировано
(и есть вакансия стажёра-аналитика)
мы делаем интересные митапы про разработку
(приходите, у нас джависты выступают)
приходите, если есть желание с увлечением провести выходные
промокод, дающий скидку в 75% Academic{PiterPyMeetup}