Python的collections.abc模块提供了Sequence
和MutableSequence
抽象基类(ABC),它们涵盖了str
,bytes
,bytearray
和与预期的相似。
collections.abc
还提供了ByteString
ABC,它涵盖了bytes
,bytearray
和大概相似的类型。但是对于字符串或代码点(例如str
),它不提供ABC。 (这样的ABC可能命名为String
,CharString
或CodepointString
。)为什么提供前者而不是后者? (换句话说,需要用例但不需要用例的预期用例是什么?)
¹'Cover',例如,子类型为isinstance()
ABC。
答案 0 :(得分:3)
ByteString
,使您无需编写(bytes, bytearray)
就可以测试出现在3.x文档中的“类似字节的类型”。
事实上,它的文档字符串只是“这统一了字节和字节数组”。
对Unicode字符串没有类似的需求,因为str
是唯一的这种类型;没有什么可以统一的。
您可以单击文档顶部的源链接,找到ByteString
,然后直接从GitHub GUI git blame
找到the commit that added it。签到评论为:
添加ABC ByteString,它将字节和字节数组(而不是memoryview)统一起来。
“ PEP 3118样式缓冲区API对象”没有ABC,因为没有 在Python中识别这些内容的方法(除了尝试使用memoryview() 在他们身上。)
请注意,array.array实际上应该注册为MutableSequence 但这需要在导入集合时将其导入。
2007年11月21日前后,如果您真的想更深入地研究,可能会在b.p.o.或python-dev或python-ideas邮件列表档案中进行进一步的讨论。但是我怀疑那里是否有更多的兴趣,因为在这里实际上没有太多讨论。
Text
是str
的别名。提供它是为了为Python 2代码提供前向兼容的路径:在Python 2中,文本是unicode
的别名。使用
Text
表示值必须包含与python 2和python 3兼容的unicode字符串。
正如文档所表明的那样,这并不是为了统一同一语言中的多个Unicode字符串类型而添加的,而是为了在静态类型检查时统一Python 2 unicode
和Python 3 str
。
在运行时,如果需要,几乎可以肯定需要实际的str
或unicode
构造函数,因此可以使用类似six.text_type
的东西。