检查一个给定对象是否属于给定类型的最好方法是什么?检查该对象是否继承自给定类型如何?
比方说,我有一个对象o
。我如何检查它是否是一个`str'?
要检查o
是否是str
或str
的任何子类的实例,请使用isinstance(这将是"canonical" 方式)。
if isinstance(o, str):
检查o
的类型是否正是str
(不包括子类)。
if type(o) is str:
下面的方法也可以,在某些情况下也很有用。
if issubclass(type(o), str):
参见Python库参考中的内置函数,以了解相关信息。
还有一点要注意:在这种情况下,如果你使用的是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)):
isinstance(o, str)