协慌网

登录 贡献 社区

在 Python 中检查类型的规范方法是什么?

检查给定对象是否属于给定类型的最佳方法是什么?如何检查对象是否继承给定类型?

假设我有一个对象o 。我如何检查它是否是一个str

答案

要检查是否o是的实例str或的任何子类str ,使用isinstance (这将是 “规范” 的方式):

if isinstance(o, str):

要检查o的类型是否正好是str (排除子类):

if type(o) is str:

以下也适用,在某些情况下可能有用:

if issubclass(type(o), str):

有关相关信息,请参阅 Python Library Reference 中的内置函数

还有一点需要注意:在这种情况下,如果你使用的是 python 2,你可能真的想要使用:

if isinstance(o, basestring):

因为这也会捕获 Unicode 字符串( unicode不是str的子类; strunicode都是basestring子类)。注意, basestring在 Python 3,那里是不再存在严格分离串(的str )和二进制数据( bytes )。

或者, isinstance接受一个类的元组。如果 x 是任何(str,unicode)的任何子类的实例,则返回 True:

if isinstance(o, (str, unicode)):

检查对象类型的 Pythonic 方法是...... 不检查它。

由于 Python 鼓励Duck Typing ,你应该try...except以你想要的方式使用对象的方法。因此,如果您的函数正在寻找可写文件对象, 请不要检查它是file的子类,只是尝试使用它的.write()方法!

当然,有时这些漂亮的抽象会破坏,而isinstance(obj, cls)就是你所需要的。但要谨慎使用。

如果ostr或者是继承自str的类型,则isinstance(o, str)将返回True

当且仅当o是 str 时, type(o) is str将返回True 。如果o是从str继承的类型,它将返回False