调用对象inp()方法时出现missing required positional argument self错误的原因
解决'missing required positional argument self'错误的原因及修复方案
咱先揪出导致这个错误的核心问题:你调用inp()方法的对象根本不是Process类的实例,而是类本身!
看你代码里这段:
for i in range(x): process.append(Process) # 这里添加的是Process类,不是它的实例!
当你把Process类直接塞进process列表后,循环调用x.inp()时,x是类而不是实例。而像inp()这种实例方法,必须绑定到类的实例才能正常调用——实例调用时Python会自动把实例作为self参数传进去,但直接用类调用的话,就需要手动传self,自然会报“缺少self参数”的错误。
除了这个核心问题,你的代码还有几个逻辑和语法问题,一起帮你梳理修复:
__init__方法参数缺失:你在__init__里写了self.no=no,但__init__根本没接收no、at、bt这些参数,而且这些变量在方法里也没定义,创建实例时肯定会报错。inp方法逻辑混乱:你现在先输入进程数再创建进程,但q.no=i里的q完全没定义,而且每个进程的at和bt应该和对应实例绑定,而不是在方法里全局处理。- 实例化方式错误:创建
Process实例必须用Process(参数)的形式,而不是直接把类名加进去。
修复后的完整代码示例
process = [] class Process: def __init__(self, no): self.no = no self.at = 0 # 先初始化到达时间的默认值 self.bt = 0 # 先初始化执行时间的默认值 def inp(self): # 为当前实例的属性赋值,每个进程的属性独立保存 self.at = int(input(f'Enter arrival time for process {self.no}: ')) self.bt = int(input(f'Enter burst time for process {self.no}: ')) # 先获取要创建的进程数量 process_count = int(input('Enter the no. of processes: ')) # 逐个创建进程实例并输入属性 for i in range(process_count): new_process = Process(i) # 创建实例,传入进程编号 process.append(new_process) new_process.inp() # 调用实例的inp方法,此时self会自动绑定到new_process # 验证结果(可选) for p in process: print(f"Process {p.no} | Arrival Time: {p.at} | Burst Time: {p.bt}")
关键修复点说明
- 正确实例化类:用
Process(i)创建类的实例,而不是直接添加类本身,这样每个元素都是独立的进程对象。 - 修正
__init__方法:让它接收no参数来初始化进程编号,同时给at和bt设置默认值,避免未定义的错误。 - 调整
inp方法逻辑:直接操作当前实例的self.at和self.bt,确保每个进程的属性都存在自己的实例里,不会互相干扰。 - 理顺流程:先获取进程数量,再逐个创建实例并输入属性,逻辑更清晰合理。
内容的提问来源于stack exchange,提问作者Prajwal Pathak
相关产品推荐
相关产品推荐

