Оператор python pathlib '/' - как он это делает?

Я обнаружил, что синтаксис pathlib - или синтаксис Python - удивителен. Я хотел бы знать, как это заставляет косую черту '/' действовать как объединение путей к окнам и т. д. Переопределяет / перегружает '/'? Кажется, что в магическом контексте косая черта находится между объектом типа WindowsPath и строкой. Если я пробую между двумя строками, не получается соединить две строки (т.е. "123" / "123" -> не удается)

p=pathlib.Path(".")

p
Out[66]: WindowsPath('.')

p.cwd()
Out[67]: WindowsPath('C:/Users/user1')

p.cwd() / "mydir"
Out[68]: WindowsPath('C:/Users/user1/mydir')
19
0
4 242
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Класс Path имеет метод __truediv__, который возвращает другой путь. Вы можете сделать то же самое со своими собственными классами:

>>> class WeirdThing(object):
        def __truediv__(self, other):
            return 'Division!'

>>> WeirdThing() / WeirdThing()
'Division!'

Спасибо, код, который вы упомянули, похоже, начинается со строки 894 в pathlib.py ----- def __truediv __ (self, key): return self._make_child ((key,)) - хотя я не думаю, что когда-либо переопределил бы '/' ничего не делать.

JoePythonKing 01.11.2018 11:33

считается ли это «непифоническим»? Мне кажется, что здесь пренебрегли предсказуемым поведением

Ben Jones 30.09.2019 18:42

@BenJones Лично мне бы хотелось, чтобы Path() + Path() или Path() + 'path' объединили строки пути, в то время как Path() / Path() или Path() / 'path'os.path.join объединили их, но способ, которым это сейчас не является, само по себе, IMO.

AbyxDev 02.10.2019 15:22

Другие вопросы по теме