```py from typing import Protocol, Callable from abc import ABC, abstractmethod class A(ABC): @abstractmethod def f(self) -> None: ... class P(Protocol): a: int ta1 = A reveal_type(ta1) reveal_type(ta1()) # error ta2: type[A] = A # error reveal_type(ta2) reveal_type(ta2()) ta3: Callable[[], A] = A # no error reveal_type(ta3) reveal_type(ta3()) tp1 = P reveal_type(tp1) reveal_type(tp1()) # error tp2: type[P] = P # error reveal_type(tp2) reveal_type(tp2()) tp3: Callable[[], P] = P # no error reveal_type(tp3) reveal_type(tp3()) ``` [playground](https://mypy-play.net/?mypy=latest&python=3.10&flags=strict%2Cdisallow-any-expr&gist=8f5f7319c9e0ab9acaebd9599e37c6d8)