如何访问列表中的特定对象 (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' 时,会发生错误。