-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Fix type of forward reference to a decorated class method #4486
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
Conversation
The case wasn't properly handled before when accessing through a type object -- the type of the forward reference defaulted to `Any`. The fix doesn't work at module top level since module top levels can't be deferred, but the reference would generally fail at runtime anyway. Fixes #4485.
This is now ready for review. I've addressed the issues in Dropbox internal code. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Two optional comments.
test-data/unit/check-inference.test
Outdated
@classmethod | ||
def h(cls) -> None: | ||
reveal_type(cls.g) # E: Revealed type is 'def (x: builtins.str)' | ||
[builtins fixtures/classmethod.pyi] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe also add reveal_type(A.g)
after the class definition here?
mypy/checkmember.py
Outdated
return node.node.type | ||
else: | ||
not_ready_callback(name, context) | ||
return AnyType(TypeOfAny.special_form) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought that we normally return TypeOfAny.from_error
in all cases where the may be an error.
* master: (27 commits) Don't call --strict-optional and --incremental experimental (python#4642) Sync typeshed (python#4641) Fix callable types with inconsistent argument counts (python#4611) Fix example (add 'class A:') Make psutil an optional dependency (python#4634) mypy and mypy_extensions aren't posix only (python#3765) Documentation for attr support (python#4632) Use read_with_python_encoding in stubgen to handle file encoding (python#3790) Sync typeshed (python#4631) Add remaining core team emails to CREDITS (python#4629) Fix issues with attr code. (python#4628) Better support for converter in attrs plugin. (python#4607) Clean up credits (python#4626) Support type aliases in fine-grained incremental mode (python#4525) Fine-grained: Fix crash caused by unreachable class (python#4613) Treat divmod like a binary operator (python#4585) Sync typeshed (python#4605) Fine-grained: Don't infer partial types from multiple targets (python#4553) Fine-grained: Compare symbol table snapshots when following dependencies (python#4598) Fix type of forward reference to a decorated class method (python#4486) ...
The case wasn't properly handled before when accessing through a type object -- the type of the forward reference defaulted to `Any`. The fix doesn't work at module top level since module top levels can't be deferred, but the reference would generally fail at runtime anyway. Fixes python#4485.
The decorator case wasn't properly handled before when accessing an attribute
through a type object -- the type of the forward reference defaulted to
Any
.The fix doesn't work at module top level since module top levels can't
be deferred, but the reference would generally fail at runtime anyway.
Fixes #4485.