From: Barney Gale Date: Thu, 25 May 2023 20:24:20 +0000 (+0100) Subject: GH-104898: Add __slots__ to os.PathLike (GH-104899) X-Git-Tag: v3.13.0a1~2026 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bd1b6228d132b8e9836fe352cd8dca2b6c1bd98c;p=thirdparty%2FPython%2Fcpython.git GH-104898: Add __slots__ to os.PathLike (GH-104899) --- diff --git a/Lib/os.py b/Lib/os.py index 598c9e502301..31b957f13215 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -1079,6 +1079,8 @@ class PathLike(abc.ABC): """Abstract base class for implementing the file system path protocol.""" + __slots__ = () + @abc.abstractmethod def __fspath__(self): """Return the file system path representation of the object.""" diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 3a7a1241ba77..fb78939dcc31 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -233,7 +233,7 @@ class _PathParents(Sequence): return "<{}.parents>".format(type(self._path).__name__) -class PurePath(object): +class PurePath(os.PathLike): """Base class for manipulating paths without I/O. PurePath represents a filesystem path and offers operations which @@ -707,10 +707,6 @@ class PurePath(object): return False return True -# Can't subclass os.PathLike from PurePath and keep the constructor -# optimizations in PurePath.__slots__. -os.PathLike.register(PurePath) - class PurePosixPath(PurePath): """PurePath subclass for non-Windows systems. diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 584cc05ca82a..c6810c07ae09 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -4640,6 +4640,12 @@ class TestPEP519(unittest.TestCase): def test_pathlike_class_getitem(self): self.assertIsInstance(os.PathLike[bytes], types.GenericAlias) + def test_pathlike_subclass_slots(self): + class A(os.PathLike): + __slots__ = () + def __fspath__(self): + return '' + self.assertFalse(hasattr(A(), '__dict__')) class TimesTests(unittest.TestCase): def test_times(self): diff --git a/Misc/NEWS.d/next/Library/2023-05-24-22-50-21.gh-issue-104898.UbT2S4.rst b/Misc/NEWS.d/next/Library/2023-05-24-22-50-21.gh-issue-104898.UbT2S4.rst new file mode 100644 index 000000000000..e596ab36f5c7 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-05-24-22-50-21.gh-issue-104898.UbT2S4.rst @@ -0,0 +1 @@ +Add missing :attr:`~object.__slots__` to :class:`os.PathLike`.