GH-76846, GH-85281: Call __new__() and __init__() on pathlib subclasses#102789
Uh oh!
There was an error while loading. Please reload this page.
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 fixes an issue where
__new__()and__init__()were not called on subclasses ofpathlib.PurePathandPathin some circumstances.Specifically, the
_from_parsed_parts()constructor -- which is used when iterating directories, parents, and inwith_name()and friends -- has been altered as follows:This change alone has an unfortunate effect: paths constructed this way are re-parsed and re-normalized even though we have the fully normalized path at hand.
To fix this, we change the main constructor to not normalize paths. Instead, paths are normalized on-demand. This also speeds up path construction,
p.joinpath(q), andp / q.