如何更改子类内部的超类属性?

2024-05-29 02:03:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在定义ProductionWorker__init__时,还需要设置EmployeeClass的属性。我输入了"Bob""001121"作为测试,它可以工作,但是我需要能够从用户的输入在我的main中更改它。你知道吗

class ProductionWorker(EmployeeClass):
    SHIFT = {1: "day shift", 2: "night shift"}

    def __init__(self, shift=None, hourly_pay=None):
        EmployeeClass.__init__(self,  "Bob", "001121")
        self.__shift = shift
        self.set_shift = shift
        self.__hourly_pay = hourly_pay
        self.set_hourly_pay = hourly_pay
    # setters

    def set_shift(self, shift):
        if shift in ProductionWorker.SHIFT:
            self.__shift = shift
        else:
            self.__shift = None

    def set_hourly_pay(self, hourly_pay):
        self.__hourly_pay = hourly_pay
    # getters

    def get_shift(self):
        return self.__shift

    def get_hourly_pay(self):
        return self.__hourly_pay

    def __str__(self):
        summary = EmployeeClass.__str__(self)
        return summary + "They work on the " + ProductionWorker.SHIFT[self.__shift] + " and make " + "$" \
               + str(format(self.__hourly_pay, "0.2f")) + " an hour."

我的主要职责:

from Employee import EmployeeClass
from Employee import ProductionWorker

e_name = input("Enter the name of the employee: ")
e_number = input("Enter the ID number of the employee: ")
e_shift = int(input("Enter 1 if they work day shift or 2 if they work night shift: "))
e_hourly_pay = float(input("Enter how much they make hourly (numerical): "))

x = EmployeeClass(e_name, e_number)
z = ProductionWorker(e_shift, e_hourly_pay)
print(z)

这是我得到的结果:

Enter the name of the employee: Joe
Enter the ID number of the employee: 5555
Enter 1 if they work day shift or 2 if they work night shift: 2
Enter how much they make hourly (numerical): 30

The employee's name is Bob. Bob's ID number is: 001121. They work on the night shift and make $30.00 an hour.

Tags: thenameselfnumberifshiftdefemployee
2条回答

我将在ProductionWorker的init方法参数中包含EmployeeClass的参数,以传递给超类。你知道吗

对于Python3,可以使用super()。\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你知道吗

此外,您应该考虑使用descriptors,而不是实现getter和setter,因为这是python的方法。你知道吗

class ProductionWorker(EmployeeClass):
    def __init__(self, name, number, shift=None, hourly_pay=None):
        super().__init__(name, number)
        self.__shift = shift
        self.__hourly_pay = hourly_pay

必须将参数用作任何其他参数:

class ProductionWorker(EmployeeClass):
    SHIFT = {1: "day shift", 2: "night shift"}

    def __init__(self, name, number, shift=None, hourly_pay=None):
        EmployeeClass.__init__(self,  name, number)
        self._shift = shift
        self.hourly_pay = hourly_pay

    @property
    def shift(self):
        return self._shift

    @shift.setter
    def shift(self, shift):
        if shift in ProductionWorker.SHIFT:
            self._shift = shift
        else:
            self._shift = None

    def __str__(self):
        summary = EmployeeClass.__str__(self)
        return summary + "They work on the {} and make ${:.2f} an hour.".format(
            ProductionWorker.SHIFT[self.shift], self.hourly_pay)

name = input("Enter the name of the employee: ")
number = input("Enter the ID number of the employee: ")
shift = int(input("Enter 1 if they work day shift or 2 if they work night shift: "))
hourly_pay = float(input("Enter how much they make hourly (numerical): "))

z = ProductionWorker(name, number, shift, hourly_pay)
print(z)

相关问题 更多 >

    热门问题