Skip to content

No recognition of concretized type for generic in method's self #14806

Closed

Description

@magwas

Bug Report

Mypy does not seem to recognize concretized type for a generic in its method's self.

To Reproduce

from typing import Callable, Generic, TypeVar
from typing_extensions import ParamSpec, Concatenate, Self
from unittest.mock import Mock

P = ParamSpec("P")
R = TypeVar("R")


class Check(Generic[P, R]):
    def check(self) -> None:
        pass

class Shall(
        Generic[P, R]):
    def __init__(self, callable: Callable[P, R]) -> None:
            pass
    def suchThat(self, other: Callable[Concatenate[R, P], bool]) -> Self:
        return self

def check(returnValue: None, other: Check[[int],str] ) -> bool:
    return True



Shall[[Check[[int],str]],None](Check[[int],str].check).suchThat(check)

https://mypy-play.net/?mypy=master&python=3.9&gist=0f2967cc8cff879cdfcc8280b7fca53c

Expected Behavior

No error

Actual Behavior

main.py:25: error: Argument 1 to "Shall" has incompatible type "Callable[[Check[P, R]], None]"; expected "Callable[[Check[[int], str]], None]" [arg-type]

  • Mypy version used: latest master (de26134)
  • Mypy configuration options from mypy.ini (and other config files):
[mypy]
strict = True
explicit_package_bases = True
namespace_packages = True
#mypy_path = src:test
files = src,test
mypy_path = $MYPY_CONFIG_FILE_DIR/src:$MYPY_CONFIG_FILE_DIR/test
  • Python version used: 3.9.2

Activity

  1. magwas commented on Mar 1, 2023

    @magwas
    Author

    Even smaller reproduction:

    from typing import Callable, Generic, TypeVar
    from typing_extensions import ParamSpec, Concatenate, Self
    from unittest.mock import Mock
    
    P = ParamSpec("P")
    R = TypeVar("R")
    
    
    class Check(Generic[P, R]):
        def check(self) -> None:
            pass
    
    class Shall(
            Generic[P, R]):
        def __init__(self, callable: Callable[P, R]) -> None:
                pass
    
    Shall[[Check[[int],str]],None](Check[[int],str].check)
    

    https://mypy-play.net/?mypy=master&python=3.9&gist=4ed820cd660f49a4f7f3d800054576aa

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrongtopic-paramspecPEP 612, ParamSpec, Concatenate

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions