1

这是我的家庭作业:

问题的第一部分是定义Worker继承自Employee并包含一个属性的子类,该属性引用另一个员工,该员工是员工的经理。您应该定义一个get_manager返回工人经理的方法。

例子:
worker = Worker("Fred", 52000, myboss)

问题的第二部分是定义Executive继承自Employee并包含引用年度奖金的属性的子类。

您应该覆盖工资方法以根据他/她的薪水和奖金计算高管薪酬。您应该在类Employee的工资方法定义中使用工资方法Executive

例子:
executive = Executive("Kerry", 520000, 1040000)

我提交了以下代码,但有人告诉我“你给高管的工资是错误的”。我看不出错误是什么。我该如何做对?

class Employee(object):

    def __init__(self, name, salary):
        self._name = name
        self._salary = salary

    def my_name(self):
        return self._name

    def wage(self):
        return self._salary/26   # fortnight pay

class Worker(Employee):
    def __init__(self, name, salary, manager):
        Employee.__init__(self, name, salary)
        self._manager = manager

    def getManager(self):
        return self._manager

class Executive(Employee):
    def __init__(self, name, wage, yearlyBonus):
        Employee.__init__(self, name, salary) 
        self._yearlyBonus = yearlyBonus

    def wage(self):
        return Employee.wage(self)
4

3 回答 3

2

您可以使用super()调用当前类的超类:

def __init__(self, name, salary, manager):
    super(Worker, self).__init__(name, salary)
    self._manager = manager
于 2012-09-07T16:15:55.347 回答
0

这两种方法super(parent, self).method(...)接近或parent.method(self,...)大致等效。在这两种情况下,它都允许您从父级调用 amethod并将其应用于子级。

这种方法可以是__init__:初始化一个像它的父实例一样的子实例总是一个好主意:

class Worker(Employee):
    def __init__(self, *args):
        Employee.__init__(self, ...)
        finish_the_initialization_of_worker

但方法可以是任何东西,比如,wage

class Executive(Employee):
    def wage(self):
        return Employee.wage(self) + self._yearly_bonus
于 2012-09-07T16:38:42.027 回答
0

你也可以使用:

class Worker(Employee):
    def __init__(self, name, salary, manager):
        Employee.__init__(self, name, salary)
        self._manager = manager

如果您碰巧继承了一个,这也适用于旧式类。

于 2012-09-07T16:24:19.810 回答