在Python中检查类型的规范方法是什么?
检查给定对象是否为给定类型的最佳方法是什么? 如何检查对象是否从给定类型继承?
假设我有一个对象o
。 我如何检查它是否是一个str
?
要检查是否o
是的实例str
或的任何子类str
,使用isinstance(这将是“规范”的方式):
if isinstance(o, str):
要检查o
的类型是否完全是str
:
if type(o) is str:
以下内容也适用,在某些情况下可能有用:
if issubclass(type(o), str):
if type(o) in ([str] + str.__subclasses__()):
有关相关信息,请参阅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)):
检查对象类型的最 Pythonic方法是...不检查它。
由于Python鼓励Duck Typing,所以您应该尝试按照您想要的方式使用对象的方法。 所以如果你的函数正在寻找一个可写的文件对象,不要检查它是否是file
的子类,只要使用它的.write()
方法即可!
当然,有时候这些好的抽象概念会消失, isinstance(obj, cls)
就是你需要的。 但谨慎使用。
如果o
是一个str
或者是一个从str
继承的类型, isinstance(o, str)
将返回true
。
当且仅当o
是一个str时, type(o) is str
才会返回true
。 如果o
是从str
继承的类型,它将返回false
。 ----