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

Python调用Patient类patientInfo方法报缺少Disease参数错误如何解决

错误原因分析
  • 实例方法调用逻辑错误:你定义的patientInfo是Patient类的普通实例方法,第一个参数self要求调用时必须绑定类的实例对象。你直接用Patient.patientInfo(...)类名调用的方式,不会自动传入self参数,相当于你只传了4个参数进去,而方法实际需要self + 4个业务入参共5个参数,解释器会把你传入的name识别为self参数,后面的Age、Gender、Disease对应方法的第2-4个入参,自然就提示缺失第5个入参Disease。
  • 变量赋值逻辑错误:f.write()方法的返回值是成功写入文件的字符数,不是用户输入的内容。你现在name = f.write(input("Name: "+ "\n"))这类写法,name、Age等变量存储的都是数字,完全不是你想要的用户输入的患者信息。
  • 类设计不合理:patientInfo方法内部使用了全局变量ls,耦合性太强;另外这个方法的作用是创建新的Patient实例并加入列表,更适合定义为静态方法/类方法,不需要绑定实例。
修正方案

1. 类定义修改

把patientInfo改成静态方法,不需要self参数即可通过类名直接调用:

ls = [] # 提前定义存储患者的全局列表
class Patient:
    # 构造方法
    def __init__(self, name, Age, Gender, Disease):
        self.name = name
        self.Age = Age
        self.Gender = Gender
        self.Disease = Disease

    # 声明为静态方法
    @staticmethod
    def patientInfo(Name, Age, Gender, Disease):
        ob = Patient(Name, Age, Gender, Disease)
        ls.append(ob)

2. 主逻辑修改

先存储用户输入内容,再写入文件:

elif user_choice == 2:
    print()
    f = open("myfile.txt", "a")
    # 先获取用户输入,存到变量后再写入文件
    extra_input = input('\n')
    f.write(extra_input + "\n")
    name = input("Name: ")
    f.write(name + "\n")
    Age = input("Age: ")
    f.write(Age + "\n")
    Gender = input("Gender: ")
    f.write(Gender + "\n")
    Disease = input("Disease: ")
    f.write(Disease + "\n")
    f.close()
    # 调用静态方法,传4个业务参数即可
    Patient.patientInfo(name, Age, Gender, Disease)

也可以简化设计,直接删掉patientInfo方法,主逻辑里直接实例化Patient加入列表即可,写法更简洁:

ob = Patient(name, Age, Gender, Disease)
ls.append(ob)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:24:03