4

这是我的家庭作业,我之前在网站上看到过它,但看起来它没有解决,而且我收到的错误信息与之前提出该问题的人不同。

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

例子:

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

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

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

例子:

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

我的代码写在下面,我得到的错误消息是:'global name'salary' is not defined' in line 'Employee. init(self,name,salary)'对于Executive类(它适用于Worker类)。为什么我会收到该错误,我该如何解决?

谢谢您的帮助!

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

4 回答 4

7

错误很明显。的方法中salary没有定义。__init__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__方法。它使多重继承更容易一些。

于 2013-04-21T07:19:39.070 回答
5

只需查看发生错误的代码,然后继续查看,直到发现不匹配的代码:

def __init__(self, name, wage, yearlyBonus):
    Employee.__init__(self, name, salary) 
于 2013-04-21T07:19:26.343 回答
3

是的,您的 init 函数没有名为salary 的变量,当您将其传递给Employee 时会出错。初始化

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

当你这样做时

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

哪一项与薪水有关?将其作为员工初始化方法传递。最好用 super 调用 Employee 构造函数

从这个方法猜测

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

也许这就是你想要的(虽然不知道如何计算yearlyBonus)

 class Executive(Employee):
        def __init__(self, name, wage, yearlyBonus):
            Employee.__init__(self, name, wage * 26) 
于 2013-04-21T07:21:07.850 回答
2

看声明Executive.__init__

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

它没有在其中声明一个名为salary. 但是当你调用超类的构造函数时,

    Employee.__init__(self, name, salary) 

您要求 Python 传递名为salary第三个参数的变量的值。Python 只是抱怨这个变量不存在。

我想你可以弄清楚如何从那里修复它。:-)

于 2013-04-21T07:19:51.990 回答