Skip to content

Commit 4e918e4

Browse files
committed
Simplify Path construction.
1 parent 0897d9d commit 4e918e4

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

Lib/pathlib.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ def __new__(cls, *args):
335335
def __reduce__(self):
336336
# Using the parts tuple helps share interned path parts
337337
# when pickling related paths.
338-
return (self.__class__, tuple(self._parts))
338+
return (type(self), tuple(self._parts))
339339

340340
@classmethod
341341
def _parse_args(cls, args):
@@ -398,10 +398,8 @@ def _parse_parts(cls, parts):
398398

399399
@classmethod
400400
def _from_parts(cls, args):
401-
# We need to call _parse_args on the instance, so as to get the
402-
# right flavour.
401+
drv, root, parts = cls._parse_args(args)
403402
self = object.__new__(cls)
404-
drv, root, parts = self._parse_args(args)
405403
self._drv = drv
406404
self._root = root
407405
self._parts = parts
@@ -428,7 +426,8 @@ def _make_child(self, args):
428426
self._drv, self._root, self._parts, drv, root, parts)
429427
return self._from_parsed_parts(drv, root, parts)
430428

431-
def _join_parsed_parts(self, drv, root, parts, drv2, root2, parts2):
429+
@classmethod
430+
def _join_parsed_parts(cls, drv, root, parts, drv2, root2, parts2):
432431
"""
433432
Join the two paths represented by the respective
434433
(drive, root, parts) tuples. Return a new (drive, root, parts) tuple.
@@ -437,7 +436,7 @@ def _join_parsed_parts(self, drv, root, parts, drv2, root2, parts2):
437436
if not drv2 and drv:
438437
return drv, root2, [drv + root2] + parts2[1:]
439438
elif drv2:
440-
if drv2 == drv or self._casefold(drv2) == self._casefold(drv):
439+
if drv2 == drv or cls._casefold(drv2) == cls._casefold(drv):
441440
# Same drive => second path is relative to the first
442441
return drv, root, parts + parts2[1:]
443442
else:
@@ -481,7 +480,7 @@ def __bytes__(self):
481480
return os.fsencode(self)
482481

483482
def __repr__(self):
484-
return "{}({!r})".format(self.__class__.__name__, self.as_posix())
483+
return "{}({!r})".format(type(self).__name__, self.as_posix())
485484

486485
def as_uri(self):
487486
"""Return the path as a 'file' URI."""
@@ -1114,7 +1113,7 @@ def write_text(self, data, encoding=None, errors=None, newline=None):
11141113
"""
11151114
if not isinstance(data, str):
11161115
raise TypeError('data must be str, not %s' %
1117-
data.__class__.__name__)
1116+
type(data).__name__)
11181117
encoding = io.text_encoding(encoding)
11191118
with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
11201119
return f.write(data)
@@ -1197,7 +1196,7 @@ def rename(self, target):
11971196
Returns the new Path instance pointing to the target path.
11981197
"""
11991198
self._accessor.rename(self, target)
1200-
return self.__class__(target)
1199+
return self._from_parts((target,))
12011200

12021201
def replace(self, target):
12031202
"""
@@ -1210,7 +1209,7 @@ def replace(self, target):
12101209
Returns the new Path instance pointing to the target path.
12111210
"""
12121211
self._accessor.replace(self, target)
1213-
return self.__class__(target)
1212+
return self._from_parts((target,))
12141213

12151214
def symlink_to(self, target, target_is_directory=False):
12161215
"""

0 commit comments

Comments
 (0)