我想知道如何检查一个变量是否是一个类(不是一个实例!)
我尝试使用函数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中的关键字。
当前回答
嗯,检查。Isclass不适合我,试试这个
class foo:
pass
var = foo()
if str(type(var)).split(".")[0] == "<class '__main__":
print("this is a class")
else:
print(str(type(var)).split(".")[0])
基本上,type(var)是<class 'a type'>
示例:<类'int' 但是,当var是一个类时,它将显示类似于<class '__main__.classname'>
因此,我们将字符串拆分为<class '__main__,并使用if进行比较,如果字符串完全匹配,则它是一个类
其他回答
嗯,检查。Isclass不适合我,试试这个
class foo:
pass
var = foo()
if str(type(var)).split(".")[0] == "<class '__main__":
print("this is a class")
else:
print(str(type(var)).split(".")[0])
基本上,type(var)是<class 'a type'>
示例:<类'int' 但是,当var是一个类时,它将显示类似于<class '__main__.classname'>
因此,我们将字符串拆分为<class '__main__,并使用if进行比较,如果字符串完全匹配,则它是一个类
isinstance(X, type)
如果X是类,则返回True,否则返回False。
类Foo:称为旧样式类,类X(对象):称为新样式类。
Python中新旧风格类的区别是什么?. 推荐新款式。请阅读“统一类型和类”
还有另一种检查方法:
import inspect
class cls():
print(None)
inspect.isclass(cls)
参考:https://www.kite.com/python/docs/inspect.isclass
Benjamin Peterson关于inspect.isclass()的使用是正确的。 但是请注意,您可以使用内置函数issubclass测试Class对象是否为特定的Class,从而隐式地测试Class。 根据您的用例,这可能更加python化。
from typing import Type, Any
def isclass(cl: Type[Any]):
try:
return issubclass(cl, cl)
except TypeError:
return False
然后可以这样使用:
>>> class X():
... pass
...
>>> isclass(X)
True
>>> isclass(X())
False