首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么pathlib.Path不实现__add__?

为什么pathlib.Path不实现__add__?
EN

Stack Overflow用户
提问于 2021-03-17 16:16:07
回答 1查看 106关注 0票数 0

前提

一个方便但脆弱的路径可以用Python写成字符串。

代码语言:javascript
运行
复制
fdir = r'mydir/'
fname = r'myfile'
fpath = fdir + fname

这是一个糟糕的实践(np.inf的缺点),但语法简洁可读性强(+1的优点)。

问题

如果pathlib.Path已经实现了一个__add__方法,这就相当于一个小的语法糖。

pathlib.Path以元组的形式在内部存储路径元素,并根据需要构造表示,对吗?理论上,这不应该破坏类中的任何内容-- __add__方法只是内部self.joinpath(other)

为什么这件事没有完成,这是非丙酮的呢?

示例

代码语言:javascript
运行
复制
BASE = pathlib.Path('').resolve()  # some working directory
...
for fstring, stuff in zip(flist, queue):  # some stuff to output to file
   with open(BASE + fstring, 'w+') as f:  # <--- this is compact and readable
      f.write(stuff)

在这里,附加到路径的常见任务表示为BASE + string,它比BASE.joinpath(string)更漂亮

一个更丑陋的例子(我不知道你为什么要这么做,但请原谅我):

代码语言:javascript
运行
复制
s1 = 'components'
s2 = 'arms'
s3 = 'bones'
s4 = 'humerus'

fpath = Path(s1).joinpath(s2).joinpath(s3).joinpath(s4)

与:

代码语言:javascript
运行
复制
...
fpath = s1 + s2 + s3 + s4

相关

备注

根据iBug的响应,这种行为确实会出现在docs (https://docs.python.org/3/library/pathlib.html#basic-use)中,尽管我在搜索中忽略了它。

EN

回答 1

Stack Overflow用户

发布于 2021-03-17 16:18:42

最让您惊讶的是,pathlib.Path确实实现了一个__truediv__方法,该方法对应于/操作符,其工作方式与您对__add__方法的期望完全相同。

这句话让你大吃一惊。现在可以转到代码:

代码语言:javascript
运行
复制
s1 = 'components'
s2 = 'arms'
s3 = 'bones'
s4 = 'humerus'

fpath = Path(s1) / s2 / s3 / s4
# PosixPath('components/arms/bones/humerus')

实际上是记录在案

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66677029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档