要检查是否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
的子类; str
和unicode
都是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)
就是你所需要的。但要谨慎使用。
如果o
是str
或者是继承自str
的类型,则isinstance(o, str)
将返回True
。
当且仅当o
是 str 时, type(o) is str
将返回True
。如果o
是从str
继承的类型,它将返回False
。