Концепты для Python классов
Есть класс, к примеру:
class MyClass:
def foo(self, x: int) -> None:
print(x)
Как можно сделать type hint для параметра, который является "подобным классом", т.е. содержит метод foo, принимающий такие же параметры и возвращающий такой же тип.
def bar(like_MyClass: typing_shenanigans_for_MyClass_interface) -> None:
like_MyClass.foo(42)
В bar должны передаваться классы типа MyClass и другие подобные, для других -- варнинг. Другими словами, есть ли у type hints Python функциональность как у C++ concepts?
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
есть ли у type hints Python функциональность как у C++ concepts?
Нет. type hints в Python "для людей", они не ограничивают передачу аргумента того или иного типа. Даже написав так:
def foo(x: int):
return x
foo("sr")
вы не получите предупреждение.
Можно проверять является ли класс переменной "подходящим":
ex_types = (int, float, str)
def foo(x):
if not isinstance(x, ex_types):
raise TypeError(f'This function doesn\'t support {type(a)} type')
return x