我不知道为什么我会收到这个错误。
答案 0 :(得分:7)
正如人们所说,issubclass()
的两个参数应该是类,而不是对象的实例。
考虑这个样本:
>>> issubclass( 1, int )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: issubclass() arg 1 must be a class
>>> issubclass( type(1), int )
True
>>> isinstance( 1, int )
True
关键是使用type()
函数来获取与issubclass()
函数一起使用的实例的类型,正如另一条评论中所述,它等同于调用isinstance()
}
答案 1 :(得分:2)
这意味着您没有为issubclass()
提供类作为参数。两个参数都必须是类。第二个参数也可以是类的元组。
如果您显示引发此错误的代码,我们可以提供进一步的帮助。
issubclass(class,classinfo)
如果true
是class
的子类(直接或间接),则返回classinfo
。类被认为是其自身的子类。classinfo
可能是类对象的元组,在这种情况下,classinfo
中的每个条目都将被检查。在任何其他情况下,都会引发TypeError
异常。
答案 2 :(得分:0)
issubclass()
的第一个参数需要是“class”类型。
答案 3 :(得分:0)
基本上,此方法会告诉您第一个参数是否是第二个参数的子类。很自然,你的参数都需要是类。从您的通话中可以看出,您已调用issubclass
而没有任何参数,这会使解释程序感到困惑。
调用issubclass
就像问解释器一样:“嘿!这个类是这个类的子类吗?”。但是,由于你没有提供两个课程,你基本上已经问了解释者:“嘿!我不打算给你看任何东西,但告诉我这是否是一个子类”。这会使解释器混淆,这就是你得到这个错误的原因。
答案 4 :(得分:0)
当你使用“=”而不是“:”来声明类的属性时,你会得到错误: TypeError: issubclass() arg 1 必须是一个类。数字 1 表示您在第一个参数中有错误
这是不正确的:
class AnyClass(BaseClass):
email = str
这是正确的:
class AnyClass(BaseClass):
email : str