首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何访问列表中的特定对象(python)

如何访问列表中的特定对象(python)
EN

Stack Overflow用户
提问于 2017-11-23 23:35:08
回答 1查看 105关注 0票数 0

我写了一个超类的人,从这我有两个子类叫做雇员和病人,从雇员有两个子类叫做医生,和职员。

人的属性包括:姓名、地址和出生日期。

雇员:姓名、地址、出生日期、雇员号码和雇用日期

病人:姓名、地址、出生日期、MCP、入院日期、医院名称、医生姓名和房间号

医生:姓名、地址、出生日期、雇员人数、雇用日期、年薪、专业和病人人数。

员工:姓名、地址、出生日期、员工号码、雇用日期、小时工资以及全职或兼职状态。

我们被要求创建一个文本文件,将来自每个类的每个人的数据放入其中,然后将数据导入python,并将五种类类型的对象存储到一个一维列表中。

我已经完成了这个部分,但是我现在需要访问某些类类型来进行计算。例如,我需要联系员工,从小时工资中计算出年工资,我需要找医生来获得年薪,但我不知道如何做到这一点。

当我试图运行我编写的代码时,我会收到一条错误消息:

代码语言:javascript
运行
复制
print(people[i].getHSalary())
AttributeError: 'Person' object has no attribute 'getHSalary'

在结束时,我的for循环中出现了错误。我可以使用什么来访问每个对象的某些属性而不获取此错误?我需要计算几件独立于特定对象的东西。

代码语言:javascript
运行
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-23 23:59:51

首先,如果您创建Person对象,然后将该对象添加到列表中-此时,您的列表包含“Person”类的实例。Python中的List只能包含一种类型的对象,因此当您试图调用'getHSalary‘(它不是Person类的一部分)时,就会发生错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47464535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档