gh-117182: Allow lazily loaded modules to modify their own __class__ #117185
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.
This PR resolves #117182. The meat of the PR is to check whether the module modified its own
__class__
during load, and only set the default class if not.I also realized that the
LazyLoader
saves the original__class__
in theloader_state
dict. I haven't found a case where that__class__
isn'tModuleType
, but if it ever does occur, it does make sense to restore that type. And if that type for some reason overrides__getattribute__
, it would make sense to use that instead ofobject.__getattribute__
.