Skip to content

Conversation

@bzoracler
Copy link
Contributor

…side methods

Fixes #20479.

Comment on lines +8331 to +8361
[case testClassScopeImportAccessibleInMethods]
class A:
import mod
from mod import var

def __new__(cls) -> "A":
reveal_type(cls.mod) # N: Revealed type is "types.ModuleType"
reveal_type(cls.var) # N: Revealed type is "builtins.int"
reveal_type(cls.mod.var) # N: Revealed type is "builtins.int"
return cls()

def pos_or_named_self(self) -> None:
reveal_type(self.mod) # N: Revealed type is "types.ModuleType"
reveal_type(self.var) # N: Revealed type is "builtins.int"
reveal_type(self.mod.var) # N: Revealed type is "builtins.int"

def pos_only_self(self, /) -> None:
reveal_type(self.mod) # N: Revealed type is "types.ModuleType"
reveal_type(self.var) # N: Revealed type is "builtins.int"
reveal_type(self.mod.var) # N: Revealed type is "builtins.int"

@classmethod
def clsmethod(cls) -> None:
reveal_type(cls.mod) # N: Revealed type is "types.ModuleType"
reveal_type(cls.var) # N: Revealed type is "builtins.int"
reveal_type(cls.mod.var) # N: Revealed type is "builtins.int"

[file mod.py]
var = 1
[builtins fixtures/module.pyi]

Copy link
Contributor Author

@bzoracler bzoracler Dec 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.mod.var was revealed to be Any in the body of __new__() and pos_only_self() before this PR. See e.g. mypy Playground for a reproducer:

class A:
    import math

    def __new__(cls) -> "A":
        reveal_type(cls.math.pi)  # N: Revealed type is "Any"
        return cls()

    def pos_or_named_self(self) -> None:
        reveal_type(self.math.pi)  # N: Revealed type is "builtins.float"

    def pos_only_self(self, /) -> None:
        reveal_type(self.math.pi)  # N: Revealed type is "Any"

    @classmethod
    def clsmethod(cls) -> None:
        reveal_type(cls.math.pi)  # N: Revealed type is "builtins.float"

@github-actions
Copy link
Contributor

According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Incorrect attribute access for functions nested inside methods

1 participant