Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion mypy/semanal.py
Original file line number Diff line number Diff line change
Expand Up @@ -6505,7 +6505,9 @@ def _lookup(
implicit_node = node
# 2b. Class attributes __qualname__ and __module__
if self.type and not self.is_func_scope() and name in {"__qualname__", "__module__"}:
return SymbolTableNode(MDEF, Var(name, self.str_type()))
v = Var(name, self.str_type())
v._fullname = name
return SymbolTableNode(MDEF, v)
# 3. Local (function) scopes
for table in reversed(self.locals):
if table is not None and name in table:
Expand Down
5 changes: 5 additions & 0 deletions test-data/unit/check-classes.test
Original file line number Diff line number Diff line change
Expand Up @@ -8927,6 +8927,11 @@ class C:
__module__ # E: Name "__module__" is not defined
__qualname__ # E: Name "__qualname__" is not defined

x: __module__ # E: Variable "__module__" is not valid as a type \
# N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
y: __qualname__ # E: Variable "__qualname__" is not valid as a type \
# N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases

[case testPropertySetterType]
class A:
@property
Expand Down