【发布时间】:2017-04-19 07:32:10
【问题描述】:
我正在尝试编写带有子类的程序。我已经调试了几个小时,但找不到解决方案。
我需要编写一个员工类来保存员工姓名和员工编号的数据属性。接下来,我需要编写一个名为 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'
这是我的验证文件:
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
这是我的员工档案:
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)
这是我的主文件:
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)
【问题讨论】:
-
一个解决方案可能是像
def __init__(self, name=None, number=None, shift=None, rate=None, hours=None):这样的kwargs,否则你必须调用构造函数,如:EmployeeFile.ProductionWorker ('name', 123, 'shift here', 7.25, 30)...也许将值保存在一个临时位置然后调用构造函数?
标签: python inheritance