Python报missing 1 required positional argument: 'self'错误如何解决
问题原因分析
你遇到的报错和代码逻辑问题共有两处:
- 实例化类时没有传入构造函数
__init__要求的两个必填位置参数array1和array2:你的构造函数明确要求创建Operation实例时必须传入两个数组参数,但你写的trial= Operation()没有传任何参数,这是触发missing 1 required positional argument: 'self'报错的直接原因。 get_functions_names方法存在语法错误:self.dir(Operation)写法错误,dir是Python内置函数,不属于实例的方法,不需要加self.前缀,正确写法是dir(Operation)或者dir(self)。
修复后的可运行代码
import numpy as np class Operation: def __init__(self, array1, array2): self.array1 = array1 self.array2 = array2 print("Input arrays:", array1, "and", array2) def get_functions_names(self): # 过滤双下划线开头的魔法方法,只返回自定义的普通方法名称 listofmethods = [func for func in dir(Operation) if not func.startswith('__')] return listofmethods def element_wise_addition(self): addition_result = self.array1 + self.array2 return addition_result # 实例化时传入两个数组参数 trial = Operation(np.array([1,2,3]), np.array([4,5,6])) print(trial.get_functions_names()) # 输出结果:['element_wise_addition', 'get_functions_names']
如果你的场景允许无参数实例化,可以给构造函数的参数设置默认值,比如修改为def __init__(self, array1=None, array2=None):,此时不传参数也能正常创建实例。
疑问解答
- 该报错是否是因为我在类构造函数中定义了两个数组参数导致的?
存在直接关联:你在构造函数中定义了两个必填的位置参数,实例化时没有传入对应参数就会触发该参数缺失报错。
- 是否需要单独创建新类来实现该功能?
不需要,当前类内就可以实现获取类内所有函数名称的功能,只需要修正
dir函数的调用方式即可,不需要额外创建新类。
内容的提问来源于stack exchange,提问作者Flaskappdonotwork
相关产品推荐
相关产品推荐

