继承呼唤

时间:2012-09-07 16:15:06

标签: python class inheritance

这是我的家庭作业:

  

问题的第一部分是定义继承自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)

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

你也可以使用:

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

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

答案 2 :(得分:0)

两种方法super(parent, self).method(...)方法或parent.method(self,...)大致相同。在这两种情况下,它都允许您从父母调用method并将其应用于孩子。

此方法可以是__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