【发布时间】:2020-08-26 09:56:43
【问题描述】:
查看 Python 中的 str 和 bytes 类型时,发现它们非常相似。唯一的区别是。它们的属性是:
>>> set(dir(bytes)) - set(dir(str))
{'hex', 'fromhex', 'decode'}
>>> set(dir(str)) - set(dir(bytes))
{'isidentifier', 'encode', 'isdecimal', 'isnumeric', 'casefold', 'format', 'isprintable', 'format_map'}
检查Python documentation,我认为这些差异与它们与抽象基类collections.abc.ByteString 的关系无关。但是,bytes 被视为子类,而 str 不是:
>>> issubclass(bytes, collections.abc.ByteString)
True
>>> issubclass(str, collections.abc.ByteString)
False
虽然观察到的行为对于辨别这些类型很有用,但我不明白 Python 为什么会这样。在我对 Python 的鸭子类型概念的理解中,str 和 bytes 都应该被视为子类,只要它们带有相关的属性即可。
【问题讨论】:
标签: python abstract-class abc