我想知道如何检查一个变量是否是一个类(不是一个实例!)
我尝试使用函数isinstance(对象,class_or_type_or_tuple)来做到这一点,但我不知道一个类会有什么类型。
例如,在下面的代码中
class Foo: pass
isinstance(Foo, **???**) # i want to make this return True.
我试着用“阶级”来代替??,但我意识到class是python中的关键字。
我想知道如何检查一个变量是否是一个类(不是一个实例!)
我尝试使用函数isinstance(对象,class_or_type_or_tuple)来做到这一点,但我不知道一个类会有什么类型。
例如,在下面的代码中
class Foo: pass
isinstance(Foo, **???**) # i want to make this return True.
我试着用“阶级”来代替??,但我意识到class是python中的关键字。
当前回答
还有另一种检查方法:
import inspect
class cls():
print(None)
inspect.isclass(cls)
参考:https://www.kite.com/python/docs/inspect.isclass
其他回答
>>> class X(object):
... pass
...
>>> type(X)
<type 'type'>
>>> isinstance(X,type)
True
此检查与Python 2兼容。3.x和Python 3.x。
import six
isinstance(obj, six.class_types)
这基本上是一个包装器函数,执行与andrea_crotti answer中相同的检查。
例子:
>>> import datetime
>>> isinstance(datetime.date, six.class_types)
>>> True
>>> isinstance(datetime.date.min, six.class_types)
>>> False
更好的方法是使用inspect。isclass函数。
>>> import inspect
>>> class X(object):
... pass
...
>>> inspect.isclass(X)
True
>>> x = X()
>>> isinstance(x, X)
True
>>> inspect.isclass(x)
False
这里已经有了一些可行的解决方案,但这里还有一个:
>>> import types
>>> class Dummy: pass
>>> type(Dummy) is types.ClassType
True
在某些情况下(取决于你的系统),一个简单的测试是看看你的变量是否有__module__属性。
if getattr(my_variable,'__module__', None):
print(my_variable, ".__module__ is ",my_variable.__module__)
else:
print(my_variable,' has no __module__.')
Int, float, dict, list, STR等没有__module__