[Python-ideas] Dunder method to make object str-like

Brett Cannon brett at python.org
Thu Apr 7 15:10:00 EDT 2016


On Thu, 7 Apr 2016 at 12:03 Chris Barker <chris.barker at noaa.gov> wrote:

>
> On Thu, Apr 7, 2016 at 11:59 AM, Brett Cannon <brett at python.org> wrote:
>
>>   class StringLike(abc.ABC):
>>
>>     @abstractmethod
>>     def __str__(self):
>>         """Return the string representation of something."""
>>
>>   StringLike.register(pathlib.PurePath)  # Any 3rd-party library can do
>> the same.
>>
>> You could also call the class StringablePath or something and get the
>> exact same concept across where you are using the registration abilities of
>> ABCs to semantically delineate when a class's __str__() returns a usable
>> file path.
>>
>> The drawback is that this isn't easily backported like `path.__ospath__()
>> if hasattr(path, '__ospath__') else path` for libraries that don't
>> necessarily have access to pathlib but want to be compatible with accepting
>> path objects.
>>
>
> and a plus is that it's compatible with type hinting -- is that the future
> of Python???
>

So the other way to do this is to combine the proposals:

  class BasePath(abc.ABC):

      @abstractmethod
      def __ospath__(self):
          """Return the file system path, serialized as a string."""

Then pathlib.PurePath can inherit from this ABC and anyone else can as well
or be registered as doing so. Then in typing.py you can have:

  class Path(extra=pathlib.BasePath):
     __slots__ = ()

  PathLike = Union[str, Path]

Then any third-party library can register with the ABC and get the typing
correctly (assuming I didn't botch the type specification).

Guido also had some protocol proposal a while back that I think he floated
here, but I don't think the discussion really went anywhere as it was an
early idea.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20160407/0a37661f/attachment.html>


More information about the Python-ideas mailing list