You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么CPython调用type.__subclasscheck__传1参报错传2参正常?

问题原因解释

本质是Python特殊方法的参数规则

  • __subclasscheck__是type类定义的特殊方法,它的完整签名为__subclasscheck__(self, subclass),要求传入两个参数:
    • 第一个self为要判断的父类对象
    • 第二个subclass为要校验是否为子类的候选对象
  • 当你直接调用type.__subclasscheck__时,拿到的是未绑定的原生方法,不会自动填充self参数,需要你手动传入所有必填参数。
  • 你第一次调用type.__subclasscheck__(object)仅传入了1个参数,仅满足了self的传参要求,缺少第二个必填的subclass参数,所以触发报错。报错信息中提到的takes exactly one argument (0 given)是CPython的特殊计数逻辑:这里统计的是除self之外的参数数量,确实需要1个、实际传入0个,和报错提示一致。
  • 第二次调用type.__subclasscheck__(object, object)传入了两个参数,刚好匹配方法的参数要求,逻辑为判断object是否是object的子类,最终返回True属于正常结果。

补充说明

  • 日常使用中不需要直接调用该方法,调用内置函数issubclass(subclass, parent)时,Python解释器会自动完成参数补全、方法调用的逻辑,无需手动处理self参数。
  • 该表现和Debian 10系统环境无关,属于CPython的标准实现,所有符合Python语法规范的版本都会有相同表现。

内容的提问来源于stack exchange,提问作者Daniel Bandeira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:15:01