如何访问列表中的特定对象 (python)
How to access specific objects in a list (python)
我写了一个 superclass People 从这里我有两个子classes 叫做 employee 和 patient ,从 employee 有两个子classes 叫做 doctor ,和工作人员。
People 的属性包括:姓名、地址和出生日期
员工:姓名、地址、出生日期、员工编号和入职日期
患者:姓名、地址、出生日期、MCP、入院日期、医院名称、医生姓名和房间号
医生:姓名、地址、出生日期、员工编号、聘用日期、年薪、专业和患者人数
员工:姓名、地址、出生日期、员工编号、雇用日期、小时工资以及全职或兼职状态
我们被要求创建一个文本文件,我们将每个 class 中每个人的数据放入其中,然后将数据导入 python 并存储五个 [=34] 的对象=] 输入一维列表。
我已经完成了这部分,但是我现在需要访问某些 class 类型来进行计算。例如,我需要访问 staff 以根据小时工资计算年薪,我需要访问 doctor 以获取年薪,但我不确定如何执行此操作。
当我尝试 运行 我写的代码时,我收到一条错误消息说
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()
首先 'if' 如果您创建了 Person 对象并将该对象添加到列表中 - 此时您的列表包含 'Person' class 的实例。 Python 中的列表只能包含一种类型的对象,因此当您尝试调用不属于 Person class 的 'getHSalary' 时,会发生错误。
我写了一个 superclass People 从这里我有两个子classes 叫做 employee 和 patient ,从 employee 有两个子classes 叫做 doctor ,和工作人员。
People 的属性包括:姓名、地址和出生日期
员工:姓名、地址、出生日期、员工编号和入职日期
患者:姓名、地址、出生日期、MCP、入院日期、医院名称、医生姓名和房间号
医生:姓名、地址、出生日期、员工编号、聘用日期、年薪、专业和患者人数
员工:姓名、地址、出生日期、员工编号、雇用日期、小时工资以及全职或兼职状态
我们被要求创建一个文本文件,我们将每个 class 中每个人的数据放入其中,然后将数据导入 python 并存储五个 [=34] 的对象=] 输入一维列表。
我已经完成了这部分,但是我现在需要访问某些 class 类型来进行计算。例如,我需要访问 staff 以根据小时工资计算年薪,我需要访问 doctor 以获取年薪,但我不确定如何执行此操作。
当我尝试 运行 我写的代码时,我收到一条错误消息说
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()
首先 'if' 如果您创建了 Person 对象并将该对象添加到列表中 - 此时您的列表包含 'Person' class 的实例。 Python 中的列表只能包含一种类型的对象,因此当您尝试调用不属于 Person class 的 'getHSalary' 时,会发生错误。