Есть ли что-то вроде issubclass в python, который вернет False, если первый аргумент не является классом?

#python

#python

Вопрос:

Я бы хотел issubclass(1, str) вернуть false, 1 не является подклассом str . Поскольку это вообще не класс, я получаю TypeError .

Есть ли хороший способ проверить это, не прибегая к try, except ?

 try:
    if issubclass(value, MyClass):
        do_stuff()
except TypeError:
    pass
  

Ответ №1:

Кажется, вы хотите isinstance:

 >>> isinstance(1, str)
False
  

Ответ №2:

 import inspect
def isclassandsubclass(value, classinfo):
    return inspect.isclass(value) and issubclass(value, classinfo)
  

Ответ №3:

Без импорта какого-либо модуля:

 def issubclass_(c, clazz):
    return isinstance(c, type) and issubclass(c, clazz)
  

Ответ №4:

Не уверен, какова ваша база данных, но проверка по классу или экземпляру класса — это слишком разные вещи (и у них разные методы API: issubclass() vs. isinstance()).

Поэтому вам всегда нужно проверять, является ли ваш ‘item’ экземпляром чего-либо класса.

>

 >> (1).__class__
<type 'int'>
>>> (1).__class__.__class__
<type 'type'>
  

Ответ №5:

вы могли бы просто проверить перед вызовом issubclass() :

 import types

def myissubclass (c, sc):
    if type(c) != types.ClassType
        return False
    return issubclass (c, sc)
  

но я думаю, что было бы более питонически использовать исключения:

 def myissubclass (c, sc):
    try:
        return issubclass (c, sc)
    except TypeError:
        return False