If A is abstract, it's weird to me that we have a difference in the following two calls: from abc import abstractmethod, ABCMeta class A(metaclass=ABCMeta): @abstractmethod def __init__(self, a: int) -> None: pass def test_a(A_t: type[A]) -> None: A_t(1) A(1) Mypy tr...