2017-04-18 52 views
1

我试图编写一个程序与子类。我一直在调试几个小时,找不到解决方案。继承和子类有一些问题

我需要编写一个Employee类,保留Employee name和Employee number的数据属性。接下来,我需要编写一个名为ProductionWorker的类,该类是Employee类的子类。 ProductionWorker类应保留Shift数字,小时工资率和本周工作小时的数据属性。工作日分为两个班次:白天和晚上。班次属性将保存代表员工工作班次的整数值。白天班次为1,夜班班次为2.为每个班级编写适当的访问器和增变器方法。

接下来,我需要创建ProductionWorker类的对象并提示用户输入每个对象的数据属性的数据。我使用数据验证类来确保用户输入工资率和工时的有效值。将数据存储在对象中,然后使用对象的访问器方法来检索它并将其显示在屏幕上。我还需要显示这位工作人员本周的总工资。总工资=小时工资*工作小时数。我无法对主文件进行任何计算。

接下来,我需要编写一个ShiftSupervisor类,它是Employee类的一个单独的子类。轮班主管如果他们的班次符合生产目标,就可以获得工资和年度奖金。 ShiftSupervisor类应该保留年薪的数据属性和轮班主管获得的年度生产奖金的数据属性。
我需要编写第二个程序来创建ShiftSupervisor类的对象,并提示用户输入每个对象的数据属性的数据。我需要显示这位主管的年度总薪酬。

当我经营的主要文件,我得到这个错误:

 Traceback (most recent call last): 
    File "/Users/Jeremy/Documents/Python Projects/Mosier_Jeremy_HW8/HW8MAIN.py", line 4, in <module> 
    employeeObject = EmployeeFile.ProductionWorker() 
TypeError: __init__() missing 5 required positional arguments: 'name', 'number', 'shift', 'rate', and 'hours' 

这里是我的ValidationFile:

class ValidationClass: 

    def checkFloat (self, inputString): 

     try: 
      result = float (inputString) 
     except Exception: 
      return -1 

     if result < 0: 
      return -1 
     else: 
      return result 

    def checkInteger (self, inputString): 

     try: 
      result = int (inputString) 
     except Exception: 
      return -1 

     if result < 0: 
      return -1 
     else: 
      return result 

这里是我的EmployeeFile:

class Employee(): 
    def __init__(self, name, number): 
     self.__Name = name 
     self.__Number = number 

    def set_Name (self, name): 
     self.__Name = value 

    def set_Number(self, number): 
     self.__Number = value 

    def get_Name (self): 
     return self.__Name 

    def get_Number (self): 
     return self.__Number 

class ProductionWorker (Employee): 
    def __init__(self, name, number, shift, rate, hours): 
     self.__Shift = shift 
     self.__Rate = rate 
     self.__Hours = hours 
     Employee.__init__(self, name, number) 

    def set_Shift (self, shift): 
     self.__Shift = shift 

    def set_PayRate (self, rate): 
     self.__PayRate = rate 

    def set_Hours (self, hours): 
     self.__Hours = hours 

    def get_Shift (self): 
     if self.__Shift == 1: 
      s = 'Day shift' 
     elif self.__Shift == 2: 
      s = 'Night shift' 
     return s 

    def get_PayRate (self): 
     return self.__PayRate 

    def get_Hours (self): 
     return self.__Hours 

    def get_Pay (self): 
     return self.__Pay 

    def calcPay (self): 
     self.__Pay = (self.__PayRate) * (self.__Hours) 

class ShiftSupervisor (Employee): 
    def __init__ (self, name, number, salary, bonus): 
     self.__Salary = salary 
     self.__Bonus = bonus 
     Employee.__init__ (self, name, number) 

    def set_Salary (self, salary): 
     return self.__Salary 

    def set_Bonus (self, bonus): 
     return self.__Bonus 

    def get_Salary (self): 
     self.__Salary = salary 

    def get_Bonus (self): 
     self.__Bonus = bonus 

    def calcPay (self): 
     self.__Pay = (self.__Salary) + (self.__Bonus) 

这里是我的主file:

import EmployeeFile 
import ValidationFile 

employeeObject = EmployeeFile.ProductionWorker() 
validationObject = ValidationFile.ValidationClass() 

employeeName = -1 
while employeeName == -1: 
    employeeName = input ('Please enter the employee name: ') 
    if employeeName == '': 
     print ('ERROR: Please enter a valid name.') 
     employeeName = -1 

employeeNumber = -1 
while employeeNumber == -1: 
    employeeNumber = input ('Please enter the employee name: ') 
    if employeeNumber == '': 
     print ('ERROR: Please enter a valid name.') 
     employeeNumber = -1 

shiftNumber = -1 
while shiftNumber == -1: 
    shiftNumber = input ('Please enter which shift the employee works. 1 for day shift, 2 for night shift: ') 
    if shiftNumber < 1 or shiftNumber > 2: 
     print ('ERROR: Shift number must be entered as a 1 or a 2.') 

payRate = -1 
while payRate == -1: 
    payEntry = input ('Please enter which shift the employee works. 1 for day shift, 2 for night shift: ') 
    payRate = validationObject.checkFloat (payEntry) 
    if payRate == -1: 
     print ('ERROR: Pleae enter a valid payRate.') 

hours = -1 
while hours == -1: 
    hoursEntry = input ('Please enter which shift the employee works. 1 for day shift, 2 for night shift: ') 
    payRate = validationObject.checkFloat (hoursEntry) 
    if payRate == -1: 
     print ('ERROR: Pleae enter a valid payRate.') 

#populate inputs 
employeeObject.set_Name (employeeName) 
employeeObject.set_Number (employeeNumber) 
employeeObject.set_Shift (shiftNumber) 
employeeObject.set_PayRate (payRate) 
employeeObject.set_Hours (hours) 

print ('Employee name: ', employeeName) 
print ('Employee number: ', employeeNumber) 
print ('Shift: ', shiftNumber) 
print ('Pay rate: ', payRate) 
print ('Hours worked: ', hours) 
+0

一个解决方案可能会像'高清__init __ kwargs( self,name = None,number = None,shift = None,rate = None,hours = None):''另外你必须调用构造函数,如:'EmployeeFile.ProductionWorker('name',123,'shift here', 7.25,30)'......也许将这些值保存在一个临时的地方,然后调用构造函数? – jmunsch

回答

0

你ProductionWorker类需要你把某些参数,这就是为什么它是抱怨:

class ProductionWorker (Employee): 
    def __init__(self, name, number, shift, rate, hours): 
     self.__Shift = shift 
     self.__Rate = rate 
     self.__Hours = hours 
     Employee.__init__(self, name, number) 

您需要可以使这些可选的或不创建对象,直到你把所有这些信息。我建议等到你的所有信息,然后替换当前填入输入:

#populate inputs 
employeeObject = EmployeeFile.ProductionWorker(employeeName, employeeNumber, shiftNumber, payRate, hours) 

此外,你应该看看super()作为适当的方法来调用父类初始化。

0

你打电话给你的构造函数在你的程序,因为你已经宣布在初始化几个变量方法:

主程序

employeeObject = EmployeeFile.ProductionWorker("name", 12, 1, 10.0, 3)#random variable names used