字节和字节数组的超类是什么?

8 投票
3 回答
3204 浏览
提问于 2025-04-16 19:08

我正在写一个函数,这个函数可以接收Unicode字符串或者字节(bytes)对象(或者字节数组bytearray)。我想确保只有这两种类型的数据能被传入。我知道可以通过 isinstance(x, str) 来检查某个东西是不是字符串,也知道可以写 isinstance(x, bytes) or isinstance(x, bytearray) 来检查它是不是字节或字节数组。

我想知道有没有更简洁的方法来检查后者,也就是说,是否有一个类是 bytesbytearray 都继承自的?

3 个回答

2

接受Unicode字符串是没有意义的,因为在任何情况下它们都不是二进制数据。我可能会接受任何类型的序列,如果这个序列中的任何一个元素不是0到255之间的整数,就抛出一个错误(你可能会在压缩时发现这个问题)。

如果你想支持Python 2,你还需要把字符串作为一个特殊情况来处理,因为在Python 2中,字符串就是二进制类型。

6

你可以使用:

isinstance(x, (bytes, bytearray))

不过,鸭子类型可能会很有用,这样其他不是从字节(bytes)或字节数组(bytearray)派生的类型,但实现了正确的方法,也可以传递给这个函数。

8

除了 object 这个类之外,没有其他共同的基础类:

>>> bytearray.__base__
<class 'object'>
>>> bytes.__base__
<class 'object'>

不要去检查类型。让用户传入她想要的任何类型的参数。如果这个类型没有你需要的接口,你的代码反正也会出错。

撰写回答