我写了一个超类的人,从这我有两个子类叫做雇员和病人,从雇员有两个子类叫做医生,和职员。
人的属性包括:姓名、地址和出生日期。
雇员:姓名、地址、出生日期、雇员号码和雇用日期
病人:姓名、地址、出生日期、MCP、入院日期、医院名称、医生姓名和房间号
医生:姓名、地址、出生日期、雇员人数、雇用日期、年薪、专业和病人人数。
员工:姓名、地址、出生日期、员工号码、雇用日期、小时工资以及全职或兼职状态。
我们被要求创建一个文本文件,将来自每个类的每个人的数据放入其中,然后将数据导入python,并将五种类类型的对象存储到一个一维列表中。
我已经完成了这个部分,但是我现在需要访问某些类类型来进行计算。例如,我需要联系员工,从小时工资中计算出年工资,我需要找医生来获得年薪,但我不知道如何做到这一点。
当我试图运行我编写的代码时,我会收到一条错误消息:
print(people[i].getHSalary())
AttributeError: 'Person' object has no attribute 'getHSalary'
在结束时,我的for循环中出现了错误。我可以使用什么来访问每个对象的某些属性而不获取此错误?我需要计算几件独立于特定对象的东西。
from Person import Person
from Employee import Employee
from Doctor import Doctor
from Staff import Staff
from Patient import Patient
def main():
people = []
infile = open("classdata.txt", "r")
allLines = infile.readlines()
for i in range(len(allLines)):
line = allLines[i].strip()
if line == "Person":
i += 1
line = allLines[i].strip()
name = line
i += 1
line = allLines[i].strip()
address = line
i += 1
line = allLines[i].strip()
DOB = line
person = Person(name, address, DOB)
people.append(person)
elif line == "Employee":
i += 1
line = allLines[i].strip()
name = line
i += 1
line = allLines[i].strip()
address = line
i += 1
line = allLines[i].strip()
DOB = line
i += 1
line = allLines[i].strip()
empNum = line
i += 1
line = allLines[i].strip()
DOH = line
emp = Employee(name, address, DOB, empNum, DOH)
people.append(emp)
elif line == "Doctor":
i += 1
line = allLines[i].strip()
name = line
i += 1
line = allLines[i].strip()
address = line
i += 1
line = allLines[i].strip()
DOB = line
i += 1
line = allLines[i].strip()
empNum = line
i += 1
line = allLines[i].strip()
DOH = line
i += 1
line = allLines[i].strip()
aSal = line
i += 1
line = allLines[i].strip()
spec = line
i += 1
line = allLines[i].strip()
patients = line
doc = Doctor(name, address, DOB, empNum , DOH, aSal, spec, patients)
people.append(doc)
elif line == "Staff":
i += 1
line = allLines[i].strip()
name = line
i += 1
line = allLines[i].strip()
address = line
i += 1
line = allLines[i].strip()
DOB = line
i += 1
line = allLines[i].strip()
empNum = line
i += 1
line = allLines[i].strip()
DOH = line
i += 1
line = allLines[i].strip()
jTitle = line
i += 1
line = allLines[i].strip()
dept = line
i += 1
line = allLines[i].strip()
hSalary = line
i += 1
line = allLines[i].strip()
status = line
staff = Staff(name, address, DOB, empNum, DOH, jTitle, dept, hSalary, status)
people.append(staff)
elif line == "Patient":
i += 1
line = allLines[i].strip()
name = line
i += 1
line = allLines[i].strip()
address = line
i += 1
line = allLines[i].strip()
DOB = line
i += 1
line = allLines[i].strip()
MCP = line
i += 1
line = allLines[i].strip()
dateAdmit = line
i += 1
line = allLines[i].strip()
hosp = line
i += 1
line = allLines[i].strip()
docName = line
i += 1
line = allLines[i].strip()
roomNum = line
pat = Patient(name, address, DOB, MCP, dateAdmit, hosp, docName, roomNum)
people.append(pat)
for i in range(len(people)):
print("%s \n" % people[i])
if type(staff) is Staff:
print(people[i].getHSalary())
main()
发布于 2017-11-23 23:59:51
首先,如果您创建Person对象,然后将该对象添加到列表中-此时,您的列表包含“Person”类的实例。Python中的List只能包含一种类型的对象,因此当您试图调用'getHSalary‘(它不是Person类的一部分)时,就会发生错误。
https://stackoverflow.com/questions/47464535
复制相似问题