CodeQL 文档

类实例化中参数数量错误

ID: py/call/wrong-number-class-arguments
Kind: problem
Security severity: 
Severity: error
Precision: very-high
Tags:
   - reliability
   - correctness
   - external/cwe/cwe-685
Query suites:
   - python-security-and-quality.qls

单击查看 CodeQL 仓库中的查询

对类的__init__方法的调用必须为每个没有定义默认值的参数提供一个参数,因此

  • 参数的最小数量是没有默认值的参数数量。

  • 参数的最大数量是参数的总数,除非类__init__方法采用 varargs(星号)参数,在这种情况下没有限制。

建议

如果参数太少,请检查哪些参数被省略,并为这些参数提供值。

如果参数太多,请检查是否有参数错误添加,并将其删除。

还要检查是否在运算符或点号的地方错误地插入了逗号。例如,代码是obj,attr,而应该为obj.attr

如果无法清楚地确定哪些是缺少的参数或多余的参数,那么这表明存在逻辑错误。修复方法将取决于错误的性质。

示例

class Point(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1)      # TypeError: too few arguments
p = Point(1,2,3)  # TypeError: too many arguments

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私