Что вы понимаете под словом "шаблоны"?
Например в С++ можно делать так template< typename T > void sort( T array[] ) где sort будет принимать любой тип в T
Зачем они в Питоне?
что бы создавать шаблоны, и не повторять код
Вопрос остаётся в силе )
В питоне и так любая функция считай шаблонная
функция может любой тип принимать?
def foo(bar): pass Какой тип у bar?
У bar нет типа. Есть тип у объекта на который ссылается bar
Это наводящие вопросы
typing.TypeVar, typing.Generic и все наследующее его
Ну это аннотации просто, которые не влияют на работу
вот нахрен ты это человеку который в первый раз питон увидел тулишь?
Можно подрубить статический анализатор чтобы он ругался
Я еще не увидел первый или не первый
from typing import TypeVar, Generic, List T = TypeVar('T') class Stack(Generic[T]): def __init__(self) -> None: self.items: List[T] = [] def push(self, item: T) -> None: self.items.append(item) def pop(self) -> T: return self.items.pop() def empty(self) -> bool: return not self.items if __name__ == '__main__': stack = Stack[int]() stack.push(2) stack.pop() stack.push('x') # type error for static type checker
статически типизированным язык от этого не станет. ему сложно динамическую типизацию понять, зачем вы ему еще тайпинги пихаете?
у вас тут используются 3 разных функций stack.push(2) stack.pop() stack.push('x')
и что ты хотел этим сказать?
то что код использует Generic[T] но не использует конкутруктор Stack
ты видишь какая у него каша в глове? не усугубляй.
здесь stack — это экземпляр класса Stack stack.push(2) это вызов метода push у объекта stack.
Обсуждают сегодня