Skip to content

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

Closed
@magwas

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

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