Closed
Description
After being a bit late with Python 3.13, I figured to start testing 3.14 early this time.
With Python 3.14.0a1
the following fails:
# native.py
from typing import Any
def dec(x: Any) -> Any:
return x
@dec
class D:
x: int
class E(D):
y: int
# driver.py
from native import D, E
import pickle
assert not hasattr(D, '__mypyc_attrs__')
assert E.__mypyc_attrs__ == ('y', '__dict__')
e = E()
e.x = 10
e.y = 20
assert e.__getstate__() == {'y': 20, '__dict__': {'x': 10}}
e2 = pickle.loads(pickle.dumps(e))
assert e is not e2 and e.x == e2.x and e.y == e2.y
rm -rf build
rm *.so
python3.14 -m mypyc native.py
python3.14 -c 'import driver.py'
The error message
$ python -c "import driver.py"
Traceback (most recent call last):
File "<string>", line 1, in <module>
import driver.py
File ".../driver.py", line 14, in <module>
assert e is not e2 and e.x == e2.x and e.y == e2.y
^^^^
AttributeError: 'E' object has no attribute 'x'
I bisected this to python/cpython#123192 upstream.
--
This is also part of the mypyc test suite
pytest -n0 mypyc/test/test_run.py::TestRun::run-classes.test::testPickling