Концепты для 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
→ Ссылка