pathlib.Path如何实现左操作数为字符串时的/运算?为何返回Path对象?
为什么字符串和Path对象用/运算会返回Path对象
这是Python的反向运算符重载机制在起作用。
当你执行'foo' / Path('bar')时,左操作数是字符串对象,而Python的str类并没有实现__truediv__方法(也就是不支持用/和其他对象做运算),这一步会直接失败。
此时Python会转而尝试调用右操作数(也就是Path对象)的__rtruediv__方法,把左操作数的字符串'foo'作为参数传入这个方法。Path类的__rtruediv__方法会处理字符串和Path的拼接逻辑,最终返回一个完整的PosixPath(或WindowsPath)对象。
你可以通过简单的代码验证这一点:
from pathlib import Path # 检查str是否有__truediv__方法 print(hasattr(str, '__truediv__')) # 输出: False # 检查Path是否有__truediv__方法 print(hasattr(Path, '__rtruediv__')) # 输出: True
内容的提问来源于stack exchange,提问作者davetapley
相关产品推荐
相关产品推荐

