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

Self doesn't work when appears in a callable directly nested in ClassVar #14108

Closed
ilevkivskyi opened this issue Nov 15, 2022 · 0 comments · Fixed by #14115
Closed

Self doesn't work when appears in a callable directly nested in ClassVar #14108

ilevkivskyi opened this issue Nov 15, 2022 · 0 comments · Fixed by #14115
Labels
bug mypy got something wrong topic-self-types Types for self

Comments

@ilevkivskyi
Copy link
Member

Currently this test fails

[case testTypingSelfCallableClassVar]
from typing import Self, ClassVar, Callable

class C:
    f: ClassVar[Callable[[Self], Self]]
class D(C): ...

reveal_type(D().f())  # N: Revealed type is "__main__.D"

Note, according to conventions, callable that appears directly in ClassVar should act as a method, not as an instance attribute with a callable type, i.e. in this very specific case callable needs to be made generic.

@ilevkivskyi ilevkivskyi added bug mypy got something wrong topic-self-types Types for self labels Nov 15, 2022
JukkaL pushed a commit that referenced this issue Nov 17, 2022
Fixes #14108 

This fixes both new and old style of working with self types. After all
I fixed the new style by simply expanding self type, then `bind_self()`
does its job, so effect on the instance will be the same.

I had two options fixing this, other one (that I didn't go with) is
making the callable generic in new style, if it appears in `ClassVar`.
This however has two downsides: implementation is tricky, and this adds
and edge case to an existing edge case. So instead I choose internal
consistency within the new style, rather than similarity between old and
new style.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug mypy got something wrong topic-self-types Types for self
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant