内容简介:既然所有路径都可以表示为字符串,为什么从面向对象的继承的思想来看,如果基于上述原因,Python 提出了文件系统路径协议的提案
起步
既然所有路径都可以表示为字符串,为什么 pathlib.Path
不继承 str
? 这个想法的提出在 https://mail.python.org/pipermail//python-ideas/2016-April/039475.html
可以看到,其中,还提出了将 p'/some/path/to/a/file'
返回 path.Path
实例的想法。
路径都是字符串吗?
从面向对象的继承的思想来看,如果 Path
继承自 str
,那么所有的路径都应该是字符串。但所有的路径都是字符串吗?答案是不。在 POSIX
的接口中,允许二进制字符串作为路径。也就是说路径还有 二进制路径
的形式存在。所以并不是所有路径都是字符串,尽管所有路径确实都能用字符串表示。
文件系统路径协议
基于上述原因,Python 提出了文件系统路径协议的提案 PEP-519
,该协议提供 str
或 bytes
来表示的文件系统路径。这个协议也就诞生了处理路径的 pathlib
模块 PEP-428
,该模块遵守了路径协议并将路径视为对象。
协议的实现一般也是通过鸭子协议来满足,这点出发 Path
也没必要继承 str
。
不是字符串的Path使用上有什么影响
在 Python 3.5 及以下将不能用 Path
作为open的参数:
import pathlib p = pathlib.Path('a.txt') content = open(p, 'r').read() # 换成 open(str(p), 'r') 可以运行
将会报错:
TypeError: invalid file: PosixPath('a.txt')
但这点在 Python3.6 得到的改善: https://docs.python.org/3/whatsnew/3.6.html#pep-519-adding-a-file-system-path-protocol
内置 open()
函数已更新为接受 os.PathLike
对象, os
和 os.path
模块中的所有相关函数以及大多数其他函数和类标准库都使用了文件路径系统协议。
>>> import pathlib >>> with open(pathlib.Path("README")) as f: ... contents = f.read() ... >>> import os.path >>> os.path.splitext(pathlib.Path("some_file.txt")) ('some_file', '.txt') >>> os.path.join("/a/b", pathlib.Path("c")) '/a/b/c' >>> import os >>> os.fspath(pathlib.Path("some_file.txt")) 'some_file.txt'
对于低版本的可以使用兼容性更好的:
with p.open('r') as f: content = f.read()
如果路径继承str会怎样
或者说如果我自己创建个路径类继承自 str
,这当然可以,也没人组织你,但我想从设计上阐述下这个做法的弊端。
一方面,这个做法会让路径隐式地视为字符串。不满足Python之禅的 显式胜于隐式
的理念。
另一方面也是比较重要的一点,这个做法淡化了 str
和 bytes
的界限,想想Python 2中二进制文本数据和文本数据的隐式兼容性导致了一个令人头疼的问题,将在这里又重新埋下隐患。这是倒退式的做法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 028.Python面向对象继承(单继承,多继承,super,菱形继承)
- PHP类继承、接口继承关系概述
- 面向对象:理解 Python 类的单继承与多继承
- java入门第二季--继承--java中的继承初始化顺序
- 前端基本功(七):javascript中的继承(原型、原型链、继承的实现方式)
- 组合还是继承,这是一个问题?——由模式谈面向对象的原则之多用组合、少用继承
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
新媒体文案创作与传播
秋叶、叶小鱼、勾俊伟 / 人民邮电出版社 / 2017-4 / 39.80元
《新媒体文案创作与传播》共分三篇。第1篇是新媒体文案基础篇,主要讲述了新媒体文案的基本概念、新媒体文案的岗位要求和职业能力素养;第二篇是新媒体文案创意实务篇,主要讲述了新媒体文案的创作思路、新媒体文案的写作技巧、爆款新媒体文案的打造、新媒体销售文案的写作、新媒体对文案传播的新要求、新媒体品-牌文案的写作,以及不同媒介的特征及发布形式;第三篇为新媒体文案相关技能补充,主要讲述的是策划能力。 《新媒体......一起来看看 《新媒体文案创作与传播》 这本书的介绍吧!