v0.0.342: super(C, inst) + metaclass __instancecheck__#263
Merged
Conversation
Closes B7 and C3 from the v0.1.0 audit. Two-arg super(C, inst) used to return None (the builtin was a stub), breaking metaclass machinery and __init_subclass__ patterns. Now returns an *object.Super proxy that getAttr resolves via lookupAfter + bindDescriptor. Zero-arg super() is also rerouted through the builtin when the compiler emits LOAD_GLOBAL super; CALL 0 instead of the optimized LOAD_SUPER_ATTR -- happens when the module also calls super(C, inst) explicitly somewhere, which disables the optimization file-wide. isinstance/issubclass now consult metaclass.__instancecheck__ / __subclasscheck__ before walking the MRO. Class.Metaclass is set when a class body uses metaclass= or inherits one from a base. ABCMeta keeps working through its existing ABCCheck callback; this is purely additive. Spec at notes/Spec/1500/1536_goipy_v0042_super_metaclass.md.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
super(C, inst)now returns an*object.Superproxy (was a stub returningNone); zero-argsuper()also rerouted through the builtin when the compiler skipsLOAD_SUPER_ATTR.isinstance/issubclassconsultmetaclass.__instancecheck__/__subclasscheck__before MRO;Class.Metaclasspopulated frommetaclass=kwarg or inherited via base.notes/Spec/1500/1536_goipy_v0042_super_metaclass.md. Fixture:internal/testdata/342_super_metaclass.py.Test plan
go test ./... -timeout 600sgreen