我試圖編寫一個程序與子類。我一直在調試幾個小時,找不到解決方案。繼承和子類有一些問題
我需要編寫一個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)
一個解決方案可能會像'高清__init __ kwargs( self,name = None,number = None,shift = None,rate = None,hours = None):''另外你必須調用構造函數,如:'EmployeeFile.ProductionWorker('name',123,'shift here', 7.25,30)'......也許將這些值保存在一個臨時的地方,然後調用構造函數? – jmunsch