2013-04-21 79 views
4

这是我的家庭作业,我看到它在网站上发布之前,但它看起来像没有解决,我得到了一个不同的错误信息比以前提出这个问题的人不同。在Python中使用继承

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

实施例:

worker = Worker("Fred", 52000, myboss) 

问题的第二部分是定义从雇员继承并且包括指年度奖金的属性子类执行。

你应该重写工资方法来计算基于他/她的工资和奖金的高管薪酬。您应该在执行类的工资方法定义中使用Employee的工资方法。

例子:

executive = Executive("Kerry", 520000, 1040000) 

我编写代码的下方,该错误消息我得到的是:“全球名‘薪水行“雇员’没有定义”。 初始(self,name,salary)'为班长(它适用于工人班)。为什么我得到这个错误,我该如何解决它?

谢谢你的帮助!

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) 
+0

你忘占到什么'self._yearlyBonus'在计算'执行'的工资 – Jared 2013-04-21 07:23:30

+0

我纠正了我的代码,但我仍然收到错误消息'你的执行官有错误的工资'... – kate88 2013-04-21 07:46:04

+0

@ kate88这是一个实际的错误消息吗?它从哪里来?不应该每年只应用一次,还是一次除以26? – 2013-04-21 07:58:59

回答

7

错误是相当清楚的。 salary未在方法Executive中定义。

您使用wage作为参数传递给__init__,但salary调用父类的__init__的时候,所以你应该坚持一个变量名:

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

此外,让您可以键入所有这些参数每次使用*args在:

class Executive(Employee): 
    def __init__(self, *args, yearlyBonus): 
     super(Executive, self).__init__(*args) 

使用super()而不是调用父类的__init__米ethod。它使多重继承更容易一些。

+0

谢谢,我更正了我的代码,但我仍然收到错误消息'您的执行官有错误的工资'... – kate88 2013-04-21 07:48:17

+1

@ kate88:该消息来自哪里?你得到了什么,正确的工资是多少? – Blender 2013-04-21 07:56:49

+1

现在解决了它,我只需要将每年的薪水除以26 – kate88 2013-04-21 08:29:21

5

只要看看在发生错误的代码,并继续寻找,直到你发现什么不匹配:

def __init__(self, name, wage, yearlyBonus): 
    Employee.__init__(self, name, salary) 
+0

谢谢!我更正了我的代码,但仍然收到错误消息'您的执行官的工资有误' – kate88 2013-04-21 07:46:50

+0

我认为这第二个问题是由于您对问题陈述的解释。然而,这不是Stack Overflow的主题,因为它不是一个编程问题,而是你理解你的任务之一。 – 2013-04-21 08:15:41

+0

是的,你是对的,我现在纠正了代码,它的工作原理! – kate88 2013-04-21 08:30:44

2

看的Executive.__init__声明:

def __init__(self, name, wage, yearlyBonus): 

无处在那里它宣告了一个名为salary变量。但是,当你调用父类的构造函数,

Employee.__init__(self, name, salary) 

你问的Python通过一个名为salary作为第三个参数变量的值。 Python只是抱怨说这个变量不存在。

我想你可以找出如何解决它。 :-)

+0

Thnaks,我纠正了我的代码,但是我仍然得到错误信息“您的执行官的薪水有误” – kate88 2013-04-21 07:48:33

3

是的,你的init函数没有名为salary的变量,当你将它传递给Employee时会产生错误。 init

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

,当你做到这一点

executive = Executive("Kerry", 520000, 1040000) 

其中之一相关的工资是多少?作为雇员初始化方法传递。更好,如果你调用Employee构造具有超强

此方法

def wage(self): 
     return self._salary/26 

猜测也许这就是你想要的(不知道如何虽然占yearlyBonus)

class Executive(Employee): 
     def __init__(self, name, wage, yearlyBonus): 
      Employee.__init__(self, name, wage * 26)