在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的子类; strunicode都是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 。 ----

链接地址: http://www.djcxy.com/p/5361.html

上一篇: What's the canonical way to check for type in Python?

下一篇: Displaying images from node(server) to angular 2?