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

调用对象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}")

关键修复点说明

  1. 正确实例化类:用Process(i)创建类的实例,而不是直接添加类本身,这样每个元素都是独立的进程对象。
  2. 修正__init__方法:让它接收no参数来初始化进程编号,同时给at和bt设置默认值,避免未定义的错误。
  3. 调整inp方法逻辑:直接操作当前实例的self.at和self.bt,确保每个进程的属性都存在自己的实例里,不会互相干扰。
  4. 理顺流程:先获取进程数量,再逐个创建实例并输入属性,逻辑更清晰合理。

内容的提问来源于stack exchange,提问作者Prajwal Pathak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:42:48