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
相关产品推荐
相关产品推荐

