类实例化中参数数量错误¶
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
对类的__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
参考资料¶
Python 词汇表:参数。
Python 词汇表:参数。
Python 编程常见问题解答: 参数和参数有什么区别?。
Python 语言参考:数据模型:object.init
Python 教程:类
常见弱点枚举:CWE-685。