Как проверить, является ли переменная классом или нет?

Мне было интересно, как проверить, является ли переменная классом (а не экземпляром!) или нет.

Я попытался использовать функцию isinstance(object, class_or_type_or_tuple) для этого, но я не знаю, какой тип будет иметь класс.

Например, в следующем коде

class Foo: pass  
isinstance(Foo, **???**) # i want to make this return True.

Я попытался заменить "class" на , но я понял, что class является ключевым словом в python.

Ответ 1

Еще лучше: используйте функцию inspect.isclass.

>>> import inspect
>>> class X(object):
...     pass
... 
>>> inspect.isclass(X)
True

>>> x = X()
>>> isinstance(x, X)
True
>>> y = 25
>>> isinstance(y, X)
False

Ответ 2

Инспекция.искатель, вероятно, является лучшим решением, и действительно легко понять, как это реализовано на самом деле.

def isclass(object):
    """Return true if the object is a class.

    Class objects provide these attributes:
        __doc__         documentation string
        __module__      name of module in which this class was defined"""
    return isinstance(object, (type, types.ClassType))

Ответ 3

>>> class X(object):
...     pass
... 
>>> type(X)
<type 'type'>
>>> isinstance(X,type)
True

Ответ 4

isinstance(X, type)

Возвращает True, если X - это класс и False, если нет.

Ответ 6

Это немного хакерский, но вариант, если вы не хотите избегать импорта:

def isclass(obj):
    try:
        issubclass(obj, object)
    except TypeError:
        return False
    else:
        return True

Ответ 7

Здесь уже есть некоторые рабочие решения, но вот еще один:

>>> import types
>>> class Dummy: pass
>>> type(Dummy) is types.ClassType
True