Данный
class A:
pass
class B:
pass
Если я определяю новый тип ACallback
, который принимает экземпляр A
from typing import Callable
ACallback = Callable[[A], None]
И определите функцию, которая принимает экземпляр B
def b_callback(b: B):
pass
Если я попытаюсь использовать b_callback
там, где ожидается ACallback
, я получу предупреждение о подсказке типа - как и ожидалось.
def test(callback: ACallback):
pass
test(the_callback) # <-- "Expected type '(A) -> None', got '(b: B) -> None` instead
Однако, если я создам декоратор, который принимает ACallback
def test2(callback: ACallback):
def decorate(f):
def new_f(*args, **kwargs):
return f(*args, **kwargs)
return new_f
return decorate
И передать функцию, которая не соответствует
@test2(the_callback) # <-- No type hint errors
def decorator_test():
pass
Я не вижу никаких предупреждений о подсказках типа.
Вопрос. Отсутствие предупреждений о подсказках связано с...
- Тип подсказки ошибки?
- Ограничения подсказки типа Python?
- Ограничения подсказки типа PyCharm?
- Что-то другое?