Skip to content

Preserve slotted class layouts during dynamic reconstruction - #602

Open
agammann wants to merge 1 commit into
cloudpipe:masterfrom
agammann:fix-slotted-class-reconstruction
Open

agammann wants to merge 1 commit into
cloudpipe:masterfrom
agammann:fix-slotted-class-reconstruction

Conversation

@agammann

Copy link
Copy Markdown

Dynamic classes are reconstructed before their slots attribute is restored. Assigning slots after type creation cannot change the instance layout, so slotted objects silently gain a writable dict after transfer to another process. A same-process round trip can hide this because the dynamic-class tracker reuses the original class.

Pass declared slots into class construction. Keep NamedTuple's generated slots under its metaclass's control, including the optional typing_extensions variant. Add a subprocess regression with slotted inheritance that checks field values and rejection of undeclared attributes, plus a NamedTuple compatibility test.

Validation on Windows/Python 3.12: the subprocess regression fails on the original code for both tested pickle protocols. The full suite passes after the fix: 270 passed, 10 skipped, 2 expected failures. Black 25.9.0 formatting and Ruff lint pass for both changed files.

This branch has not been deployed

No deployments
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.

1 participant