Ответ 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
Мне было интересно, как проверить, является ли переменная классом (а не экземпляром!) или нет.
Я попытался использовать функцию isinstance(object, class_or_type_or_tuple)
для этого, но я не знаю, какой тип будет иметь класс.
Например, в следующем коде
class Foo: pass
isinstance(Foo, **???**) # i want to make this return True.
Я попытался заменить "class
" на , но я понял, что class
является ключевым словом в python.
Еще лучше: используйте функцию inspect.isclass
.
>>> import inspect
>>> class X(object):
... pass
...
>>> inspect.isclass(X)
True
>>> x = X()
>>> isinstance(x, X)
True
>>> y = 25
>>> isinstance(y, X)
False
Инспекция.искатель, вероятно, является лучшим решением, и действительно легко понять, как это реализовано на самом деле.
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))
>>> class X(object):
... pass
...
>>> type(X)
<type 'type'>
>>> isinstance(X,type)
True
isinstance(X, type)
Возвращает True
, если X
- это класс и False
, если нет.
класс Foo: называется старым классом стиля и классом X (объект): называется новым классом стиля.
Проверьте В чем разница между старым стилем и новыми классами стилей в Python?. Рекомендуется новый стиль. Читайте о " объединяющих типы и классы"
Это немного хакерский, но вариант, если вы не хотите избегать импорта:
def isclass(obj):
try:
issubclass(obj, object)
except TypeError:
return False
else:
return True
Здесь уже есть некоторые рабочие решения, но вот еще один:
>>> import types
>>> class Dummy: pass
>>> type(Dummy) is types.ClassType
True