gpt4 book ai didi

python - os.path.join 与 str 子类

转载 作者:太空狗 更新时间:2023-10-30 01:35:12 28 4
gpt4 key购买 nike

有人知道为什么 os.path.join 函数不适用于 str 的子类吗?

(我在 Windows 上使用 Python3.2 x64 和 Python2.7 x86 结果是一样的)

这是我的代码

class Path(str):
def __add__(self, other):
return Path(os.path.join(self, other))

p = Path(r'C:\the\path')
d = p + 'some_file.txt'

以及我想要的结果:

'C:\\the\\path\\some_file.txt'

但无论 self 的值如何,输出都是 \\some_file.txt

我知道我可以执行 str(self) 或将其存储为 self.path 并稍后使用,但为什么 os.join.path 不接受 str 子类也不引发错误(例如当您使用数字或任何非字符串类型时)?

最佳答案

看起来 os.path.join 使用 __add__ 方法中的构建,这可以通过在 __add__ 中放置打印语句来验证> 方法。

>>> class Path(str):
... def __add__(self, other):
... print 'add'
... return Path(os.path.join(str(self), other))
...
>>> p = Path(r'/the/path')
>>> p + 'thefile.txt'
add
>>> class Path(str):
... def __add__(self, other):
... print 'add'
... return Path(os.path.join(self, other))
...
>>> p = Path(r'/the/path')
>>> p + 'file.txt'
add
add
# add printed twice

最简单的解决方案:变化

return Path(os.path.join(self, other))

return Path(os.path.join(str(self), other))

有效。

关于python - os.path.join 与 str 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682198/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com