-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Open
Labels
Description
Bug Report
Given a stub like so:
from abc import ABCMeta
class Y(metaclass=ABCMeta): ...
class Z:
foo: type[Y]
And a runtime like so:
from abc import ABCMeta
class Y(metaclass=ABCMeta): ...
class Z:
foo = Y
Stubtest will issue the following complaint:
error: Z.foo variable differs from runtime type abc.ABCMeta
This error can be reproduced with any custom metaclass; it's not just ABCMeta
that triggers the bug:
# STUB
class Meta(type): ...
class Y(metaclass=Meta): ...
class Z:
foo: type[Y]
# RUNTIME:
class Meta(type): ...
class Y(metaclass=Meta): ...
class Z:
foo = Y
To Reproduce
- Check out a local clone of mypy
- Activate a virtual environment with an editable install of mypy
- Apply this diff:
diff --git a/mypy/test/teststubtest.py b/mypy/test/teststubtest.py
index 2adbfaac2..60ddebc7f 100644
--- a/mypy/test/teststubtest.py
+++ b/mypy/test/teststubtest.py
@@ -208,6 +208,21 @@ class StubtestUnit(unittest.TestCase):
""",
error="X.mistyped_var",
)
+ yield Case(
+ stub="""
+ class Meta(type): ...
+ class Y(metaclass=Meta): ...
+ class Z:
+ foo: type[Y]
+ """,
+ runtime="""
+ class Meta(type): ...
+ class Y(metaclass=Meta): ...
+ class Z:
+ foo = Y
+ """,
+ error=None
+ )
- Run
pytest ./mypy/test/teststubtest.py
Expected Behavior
No error should be emitted.
Actual Behavior
An error was emitted.
Cc. @hauntsaninja
mjog and hamdanal