What's the canonical way to check for type in Python?

后端 未结 13 1030
南旧
南旧 2020-11-21 07:34

What is the best way to check whether a given object is of a given type? How about checking whether the object inherits from a given type?

Let\'s say I have an objec

13条回答
  •  北海茫月
    2020-11-21 08:08

    To check if o is an instance of str or any subclass of str, use isinstance (this would be the "canonical" way):

    if isinstance(o, str):
    

    To check if the type of o is exactly str (exclude subclasses):

    if type(o) is str:
    

    The following also works, and can be useful in some cases:

    if issubclass(type(o), str):
    

    See Built-in Functions in the Python Library Reference for relevant information.

    One more note: in this case, if you're using Python 2, you may actually want to use:

    if isinstance(o, basestring):
    

    because this will also catch Unicode strings (unicode is not a subclass of str; both str and unicode are subclasses of basestring). Note that basestring no longer exists in Python 3, where there's a strict separation of strings (str) and binary data (bytes).

    Alternatively, isinstance accepts a tuple of classes. This will return True if o is an instance of any subclass of any of (str, unicode):

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

提交回复
热议问题