Недостатки к пути ('foo'). Exist ()! = Bool (Path ('foo')) - PullRequest
0 голосов
/ 18 февраля 2020

Пытался перефразировать мой вопрос, чтобы он был менее основанным на мнениях.

Каковы недостатки pathlib.Path объекта, приводящего / оценивающего к False, когда путь к файловой системе не существует?

Например, pathlib.Path мог быть записан с любым __bool__ logi c, так как это просто Python class

class Path(object):
    def __init__(self, path):
        self.path_ = path

    def __bool__(self):
        return self.checkIfExistsOnFileSystemOrNot_()

    def path(self):
        return self.path_

    def checkIfExistsOnFileSystemOrNot_(self):
        # any logic here ...

    ...

Я понимаю, что вы, возможно, захотите создать filepath, который не " там "в программе python, но когда вы захотите сделать

if path:
   # do something with the path "assuming" it exits on the filesystem (and not just that it's not falsy)

Я позволю, что

if path.exists():
    # ...

Не намного ли больше усилий, но учитывая, что я прыгал между языками, это причиняло мне некоторую боль.

1 Ответ

2 голосов
/ 18 февраля 2020

Теперь, когда вопрос был изменен, последнее замечание, которое я сделал в своем первоначальном ответе, вероятно, является наиболее важным: ясность.

Дзен Python говорит:

Явный лучше, чем неявный.

и

Читаемость имеет значение.

Явный вызов .exists() вкл Path объект очень ясен. Новый программист, незнакомый с Python, мог прочитать

if some_path.exists():
    # ...

и, вероятно, понять это. Но

if some_path:
    # ...

гораздо менее ясен.

Я прыгал между языками, это причиняло мне некоторую боль.

Идиомати c Python и idiomati c Ruby или C# или Scala все разные. Это нормально.

Теперь, к остальному старому ответу:

pathlib не только для представления файлов и папок в указанной c видимой файловой системе , Он предназначен для представления и манипулирования путями per se (выделено жирным шрифтом):

Этот модуль предлагает классы, представляющие пути файловой системы с семантикой, подходящей для различных операционных систем. Классы путей делятся между чистыми путями , которые обеспечивают чисто вычислительные операции без ввода-вывода , и конкретными путями , которые наследуются от чистых путей, но также обеспечивают I / Операции O.

Вы даже можете манипулировать путями Windows в Linux системах и наоборот.

Сокращение истинности путей до "существует ли этот файл? " казалось бы странным дизайнерским решением. Особенно, когда есть другие булевы вещи, которые можно спросить о файлах и каталогах: это читабельно? Writable? Исполняемые? Символическая c ссылка? Каталог? Обычный файл? ФИФО?

...