On Tue, May 23, 2017 at 12:12:11PM +0200, Wolfgang Maier wrote:
> Here's how the proposal could be implemented in the pure Python version
> (os._fspath):
>
> def _fspath(path):
> path_type = type(path)
> if path_type is str or path_type is bytes:
> return path
How about simplifying the implementation of fspath by giving str and
bytes a __fspath__ method that returns str(self) or bytes(self)?
class str:
def __fspath__(self):
return str(self) # Must be str, not type(self).
(1) We can avoid most of the expensive type checks.
(2) Subclasses of str and bytes don't have to do anything to get a
useful default behaviour.
def fspath(path):
try:
dunder = type(path).__fspath__
except AttributeError:
raise TypeError(...) from None
else:
if dunder is not None:
result = dunder(path)
if type(result) in (str, byte):
return result
raise TypeError('expected a str or bytes, got ...')
The reason for the not None check is to allow subclasses to explicitly
deny that they can be used for paths by setting __fspath__ to None in
the subclass.
--
Steve
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/