![](/img/trans.png)
[英]Why is str not a subclass of collections.abc.ByteString?
[英]Why no character/codepoint string equivalant of `collections.abc.ByteString`?
Python的collections.abc模块提供了Sequence
和MutableSequence
抽象基类(ABCs),它们涵盖了str
, bytes
, bytearray
和类似的类型。
collections.abc
还提供了ByteString
ABC,它涵盖了bytes
, bytes
bytearray
和大概类似的类型。 但它没有为字符串或代码点(如str
提供ABC。 (这样的ABC可能被命名为String
, CharString
或CodepointString
。)为什么它不提供前者而不是后者? (换句话说,需要前者而不是后者的预期用例是什么?)
¹'封面'如同,子类型是实例isinstance()
ABC。
添加了ByteString
,为您提供了一种方法来测试3.x文档中出现的“字节类型”,而无需编写(bytes, bytearray)
。
事实上,它的文档字符串只是“这统一字节和字节数组”。
Unicode字符串没有类似的需要,因为str
是唯一这样的类型; 没有什么可以统一它。
您可以单击文档顶部的源链接,找到ByteString
,并git blame
是正确的,从GitHub的GUI找提交是添加它 。 签到评论是:
添加ABC ByteString,它统一了字节和bytearray(但不是内存视图)。
“PEP 3118样式缓冲API对象”没有ABC,因为在Python中无法识别这些(除了尝试在它们上使用memoryview())。
请注意,array.array确实应该注册为MutableSequence,但是只要导入集合就需要导入它。
如果您真的想深入挖掘,可能会在2007年11月21日左右进一步讨论bpo或python-dev或python-ideas邮件列表档案。 但我怀疑那里有更多的兴趣,因为这里真的没什么可讨论的。
请注意, typing
实际上确实有一个类型, Text
,它记录为:
Text
是str
的别名。 它提供了为Python 2代码提供前向兼容路径:在Python 2中,Text是unicode
的别名。使用
Text
指示值必须以与Python 2和Python 3兼容的方式包含unicode字符串:
正如文档所表明的那样,在同一种语言中统一多个Unicode字符串类型并没有添加,而是在静态类型检查时统一Python 2 unicode
和Python 3 str
。
在运行时,如果你想要这个,你几乎肯定想要实际的str
或unicode
构造函数,所以你要使用像six.text_type
这样的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.