我试图得到用户的输入,如果输入1的班次,它将打印出白班和2将等于夜班。我是用面向对象来做这个的,所以我不知道怎么做,因为我对它很陌生。另外,我在这里读到,教授教我设置类的方法并不是python的最佳方法,但教授就是这么想的,我对此无能为力。你知道吗
班级员工
class Employee:
def __init__(self, name, number):
self.__name = name
self.__number = number
def set_name(self, name):
self.__name = name
def set_number(self, number):
self.__number = number
def get_name(self):
return self.__name
def get_number(self):
return self.__number
班级生产工人
import employee
class ProductionWorker(employee.Employee):
def __init__(self, name, number, shift, pay):
employee.Employee.__init__(self, name, number)
self.__shift = shift
self.__pay = pay
def set_shift(self, shift):
self.__shift = shift
def set_pay(self, pay):
self.__pay = pay
def get_shift(self):
return self.__shift
def get_pay(self):
return self.__pay
def dayNight(self, shift):
if shift == 1:
self.__shift = "Day Shift"
else:
self.__shift = "Night Shift"
def __str__(self):
return "\nName: " + self.get_name() + "\nNumber: " + self.get_number() + \
"\nShift: " + self.get_shift() + "\nPay: " + self.__pay
员工测试
import ProductionWorker
def main():
name = input("Enter the users name: ")
number = input("Enter the users number: ")
shift = input("Enter the users shift (1, 2): ")
pay = input("Enter the users hourly pay rate: ")
employee = ProductionWorker.ProductionWorker(name, number, shift, pay)
empShift = employee.get_shift()
print(employee)
main()
可以使用dict映射将移位到“1”和“2”,然后使用实例移位值进行查找。你知道吗
如果类中需要,可以使用方法,逻辑基本相同。你知道吗
要使用
__str__
打印所有详细信息,只需在get_shift
方法中进行查找,而不只是返回self。\u shift:输出:
如果要将DayNight方法与If/else结合使用,则必须将其与字符串(而不是int)进行比较,最简单的方法就是返回字符串:
问题是您在ProductionWorker类中定义了一个实例方法dayNight,但从未使用过它,或者您应该修改定义,并在像这样实例化类对象之后显式调用它(也不需要传递shift参数):
昼夜定义:
然后实例化如下:
或者
为此,请仅修改初始化:
然后实例化如下:
我将创建一个名为
display_shift
的方法,该方法显示存储在静态类的dict
属性中的人类可读的移位名称:静态dict
SHIFT_NAMES
的替代方法有:实例dict在
__init__
中设置为self.shift_names = {...}
,这将允许一些方法,如def add_shift(self, shift_number, shift_name)
添加公司可能需要的任何新班次(加班?周末?假期?)一个元组,如
SHIFT_NAMES = ('day', 'night')
和display_shift
,如return self.SHIFT_NAMES[int(self.get_shift()) - 1]
。这样做的好处是无法更改或添加班次名称。一个缺点是移位需要保持连续有序int
,而且移位编号和移位名称之间的直接关系并不明确。一个单独的静态类或
collections.namedtuple
是其他的可能性编辑:
要在调用
str(employee)
时显示移位,可以使用__str__
魔术方法执行以下操作:这将导致如下结果:
你可以read more about Python magic methods here.
相关问题 更多 >
编程相关推荐