Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove TypeType exception for abstract instantiation #18094

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Nov 3, 2024

  1. Remove TypeType exception for abstract instantiation

    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 tries to then enforce soundness by preventing you from passing `A`
    to a parameter of `type[A]`. But this is very unpopular, since there
    are legitimate uses of `A` that have nothing to do with instantiation.
    See python#4717
    
    As mentioned in
    https://discuss.python.org/t/compatibility-of-protocol-class-object-with-type-t-and-type-any/48442/2
    I think we should switch to disallowing instantiation of `type[Proto]` and
    `type[Abstract]`.
    
    This also makes tackling `__init__` unsoundness more tractable. If
    people want unsound `__init__`, they can use `Callable[..., P]`.
    hauntsaninja committed Nov 3, 2024
    Configuration menu
    Copy the full SHA
    d72df74 View commit details
    Browse the repository at this point in the history