Search code examples
ooppython-3.4

Subclass `pathlib.Path` fails


I would like to enhance the class pathlib.Path but the simple example above dose not work.

from pathlib import Path

class PPath(Path):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

test = PPath("dir", "test.txt")

Here is the error message I have.

Traceback (most recent call last):
  File "/Users/projetmbc/test.py", line 14, in <module>
    test = PPath("dir", "test.txt")
  File "/anaconda/lib/python3.4/pathlib.py", line 907, in __new__
    self = cls._from_parts(args, init=False)
  File "/anaconda/lib/python3.4/pathlib.py", line 589, in _from_parts
    drv, root, parts = self._parse_args(args)
  File "/anaconda/lib/python3.4/pathlib.py", line 582, in _parse_args
    return cls._flavour.parse_parts(parts)
AttributeError: type object 'PPath' has no attribute '_flavour'

What I am doing wrong ?


Solution

  • You can subclass the concrete implementation, so this works:

    class Path(type(pathlib.Path())):
    

    Here's what I did with this:

    import pathlib
    
    class Path(type(pathlib.Path())):
        def open(self, mode='r', buffering=-1, encoding=None, errors=None, newline=None):
            if encoding is None and 'b' not in mode:
                encoding = 'utf-8'
            return super().open(mode, buffering, encoding, errors, newline)
    
    Path('/tmp/a.txt').write_text("я")