【问题标题】:Can someone explain what exactly this error means,TypeError: issubclass() arg 1 must be a class有人能解释一下这个错误到底是什么意思吗,TypeError: issubclass() arg 1 must be a class
【发布时间】:2011-01-28 16:55:05
【问题描述】:

我对为什么会收到此错误一无所知。

【问题讨论】:

  • 错误似乎很明显。也许您应该发布您认为应该有效但无效的代码。
  • 另外,使用issubclass 的理由非常非常少。
  • 也许你的意思是改用isinstance()
  • 我没有使用 issubclass。我正在尝试在两个对象之间建立关系。X 类有一个属性应该是类 YI 将发布两个类文件 ka 代码,但它们是相当大,我是python的新手,而且堆栈溢出也是......所以如果有特殊的方法可以做到这一点,请赐教
  • @gizgok:作为开始,发布引发此错误的代码。

标签: python


【解决方案1】:

正如人们所说,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()

【讨论】:

  • 嗯,你是对的......我不想让一个明显的python初学者感到困惑。我应该使用“对象的实例”(如果我错了,请纠正我)
【解决方案2】:

这意味着您没有提供类作为issubclass() 的参数。两个参数都必须是类。第二个参数也可以是一个类的元组。

如果您显示引发此错误的代码,我们可以提供进一步帮助。


来自documentation

issubclass(class, classinfo)
如果classclassinfo 的子类(直接或间接),则返回true。一个类被认为是它自己的一个子类。 classinfo 可能是类对象的元组,在这种情况下,classinfo 中的每个条目都将被检查。在任何其他情况下,都会引发 TypeError 异常。

【讨论】:

  • @Felix:我有俱乐部类和经理类。俱乐部类具有属性 Manager 应该保存经理类的实例。我已经为关系编写了函数,反之亦然。我认为这些函数是结果在给出 issubclass 错误
  • 在我看来,让非类返回 False 会更有意义,但可惜这就是我们得到的。
【解决方案3】:

当您使用“=”而不是“:”来声明类的属性时,您会收到以下错误: TypeError: issubclass() arg 1 必须是一个类。数字 1 表示您在第一个参数中有错误

这是不正确的:

class AnyClass(BaseClass):
    email = str

这是正确的:

class AnyClass(BaseClass):
    email : str

【讨论】:

    【解决方案4】:

    issubclass() 的第一个参数必须是“类”类型。

    http://pyref.infogami.com/issubclass

    【讨论】:

      【解决方案5】:

      基本上这个方法告诉你第一个参数是否是第二个参数的子类。所以很自然,你的两个参数都需要是类。从您的调用中可以看出,您调用 issubclass 时没有任何参数,这让解释器感到困惑。

      调用issubclass 就像问解释器:“嘿!这个类是这个类的子类吗?”。但是,由于您没有提供两个类,因此您实际上是在询问解释器:“嘿!我不会向您展示任何东西,但请告诉我这是否是子类”。这会使解释器感到困惑,这就是您收到此错误的原因。

      【讨论】:

        【解决方案6】:

        对于那些使用 PydanticFastAPI 并遇到此错误问题的人。 这是答案https://stackoverflow.com/a/70384637/7335848

        【讨论】:

          猜你喜欢
          • 2022-07-09
          • 1970-01-01
          • 2020-03-23
          • 2023-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-12
          相关资源
          最近更新 更多