我正在制作一个函数,它将接受Unicode字符串或字节(或字节数组)对象。我想确保只有那些类型通过。我知道我可以通过做isinstance(x, str)
来检查某个东西是否是字符串,我也知道我可以写isinstance(x, bytes) or isinstance(x, bytearray)
。
是否有更简洁的方法来检查后者,即是否存在bytes
和bytearray
都派生自的类?
除了object
:之外,没有通用基类
>>> bytearray.__base__
<class 'object'>
>>> bytes.__base__
<class 'object'>
不要检查类型。让用户传递她想要的任何类型的参数。如果该类型没有所需的接口,那么代码无论如何都会失败。
您可以使用:
isinstance(x, (bytes, bytearray))
但是,鸭子类型可能很有用,所以其他不是从字节或字节数组派生,而是实现正确方法的类型可以传递给函数。
接受Unicode字符串是没有意义的,因为它们在任何情况下都不是二进制数据。我可能会接受任何类型的序列,如果该序列中的任何项不是0到255之间的整数(您可能会在压缩过程中发现),则会引发错误。
如果您想支持Python 2,还需要接受字符串作为特殊情况,因为这是Python 2的二进制类型。