2017-11-23 26 views
0

나는 Superclass People을 작성했으며이 두 가지 하위 클래스 인 employee와 patient를 직원으로부터 두 개의 하위 클래스 인 doctor와 staff로 구성했습니다.목록의 특정 객체에 액세스하는 방법 (파이썬)

사람들의 속성은 다음과 같습니다 : 이름, 주소,

직원 생년월일 : 이름, 주소, 날짜 : 이름, 주소, 생년월일, 직원 번호, 날짜의 날짜가

환자를 고용을 출생, MCP, 입학 일, 병원 명, 의사의 이름과 방 번호의

의사 : 이름, 주소, 생년월일, 직원 수, 고용의 날짜, 연봉, 전문 날짜 및 환자의 수

직원 : 이름, 광고 드레스, 생년월일, 직원 번호, 고용일, 시간당 급여 및 풀 타임 또는 파트 타임 상태

각 클래스의 각 사람마다 데이터를 입력 한 다음 텍스트 파일을 가져올 텍스트 파일을 만들어야합니다. 데이터를 파이썬에 저장하고 다섯 가지 클래스 유형의 객체를 1d 목록에 저장합니다.

이 부분을 완료했지만 계산을 수행하려면 특정 클래스 유형에 액세스해야합니다. 예를 들어, 시간당 급여에서 연봉을 계산하려면 직원에게 연락해야하며 연봉을 받으려면 의사에게 진찰을 받아야하지만이 방법은 잘 모르겠습니다. 나는 내가 말하는 오류 메시지가 작성한 코드를 실행하려고하면

print(people[i].getHSalary()) 
AttributeError: 'Person' object has no attribute 'getHSalary' 

내 오류에 내 말 루프. 이 오류가 발생하지 않고 각 객체의 특정 속성에 액세스하려면 무엇을 사용할 수 있습니까? 특정 개체와 독립적으로 계산해야하는 몇 가지 사항이 있습니다.

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() 
+1

문제가 "목록의 특정 개체에 액세스하지 못했습니다." 당신의 코드에서의 문제는'Person'은'getHSalary'라는 함수가 없다는 것입니다. –

+1

게터 기능을 구현 한 방법을 보여줄 수 있습니까? – MMF

+0

그래, 그 기능이 사람이 아니란 걸 알아. 우리 교수는 우리가 하나의 목록에 모든 다른 객체를 저장하고 "모든 직원에 대한 총 연봉을 결정하고 출력"하기를 원했습니다. 급여를받는 유일한 수업은 스탭 클래스와 의사 클래스입니다. 직원 클래스는 HSalary를, 의사 클래스는 이미 연봉으로 주어진 aSalary를 얻을있다. 나는 서로 독립적 인 계산을 할 수 있도록 각 클래스 유형에 액세스하는 방법을 찾아 내려고 노력하고 있습니다. –

답변

0

'Person 개체를 만들고이 개체를 목록에 추가하는 경우 처음에는'Person '클래스의 인스턴스가 목록에 포함됩니다. 파이썬의 목록에는 하나의 객체 유형 만 포함될 수 있으므로 Person 클래스의 일부가 아닌 'getHSalary'를 호출하면 오류가 발생합니다.