Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

GH-76846, GH-85281: Call__new__() and__init__() on pathlib subclasses#102789

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged

Conversation

@barneygale
Copy link
Contributor

@barneygalebarneygale commentedMar 17, 2023
edited
Loading

This PR fixes an issue where__new__() and__init__() were not called on subclasses ofpathlib.PurePath andPath in 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:

diff --git a/Lib/pathlib.py b/Lib/pathlib.pyindex 55c44f12e5..c9b45ddbfa 100644--- a/Lib/pathlib.py+++ b/Lib/pathlib.py@@ -310,7 +310,9 @@ def _from_parts(cls, args):      @classmethod     def _from_parsed_parts(cls, drv, root, parts):-        self = object.__new__(cls)+        path = cls._format_parsed_parts(drv, root, parts)+        self = cls(path)+        self._str = path or '.'         self._drv = drv         self._root = root         self._parts = parts

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 tonot normalize paths. Instead, paths are normalized on-demand. This also speeds up path construction,p.joinpath(q), andp / q.

CAM-Gerlach and Jacob-Flasheye reacted with hooray emoji
Copy link
Member

@zoobazooba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

LGTM (with what I marked). Any concerns in particular that you'd like me to take a closer look at?

barneygale reacted with thumbs up emoji
Co-authored-by: Steve Dower <steve.dower@microsoft.com>
@barneygale
Copy link
ContributorAuthor

I think those were my only areas of concern! Thanks for the review :)

@barneygale
Copy link
ContributorAuthor

Are you happy for me to merge,@zooba?

@zooba
Copy link
Member

All yours:shipit:

barneygale reacted with hooray emoji

@barneygalebarneygale merged commit11c3020 intopython:mainApr 3, 2023
gaogaotiantian pushed a commit to gaogaotiantian/cpython that referenced this pull requestApr 8, 2023
…pathlib subclasses (pythonGH-102789)Fix an issue where `__new__()` and `__init__()` were not called on subclasses of `pathlib.PurePath` and `Path` in some circumstances.Paths are now normalized on-demand. This speeds up path construction, `p.joinpath(q)`, and `p / q`.Co-authored-by: Steve Dower <steve.dower@microsoft.com>
warsaw pushed a commit to warsaw/cpython that referenced this pull requestApr 11, 2023
…pathlib subclasses (pythonGH-102789)Fix an issue where `__new__()` and `__init__()` were not called on subclasses of `pathlib.PurePath` and `Path` in some circumstances.Paths are now normalized on-demand. This speeds up path construction, `p.joinpath(q)`, and `p / q`.Co-authored-by: Steve Dower <steve.dower@microsoft.com>
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@zoobazoobazooba left review comments

Assignees

No one assigned

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

3 participants

@barneygale@zooba@bedevere-bot

[8]ページ先頭

©2009-2025 Movatter.jp