在python中使用继承

kat*_*e88 4 python inheritance class

这是我的家庭作业,我之前看到它发布在网站上,但看起来它没有解决,我收到的错误信息不同于之前提出问题的人.

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

例:

worker = Worker("Fred", 52000, myboss)
Run Code Online (Sandbox Code Playgroud)

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

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

例:

executive = Executive("Kerry", 520000, 1040000)
Run Code Online (Sandbox Code Playgroud)

我的代码写在下面,我得到的错误信息是:'全局名称'薪水'未在'员工'行中定义.对于类Executive(它适用于Worker类)的init(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)
Run Code Online (Sandbox Code Playgroud)

Ble*_*der 7

错误很清楚.salary没有在__init__方法中定义Executive.

您用作wage参数__init__,但salary在调用__init__父类时,您应该坚持使用一个变量名:

class Executive(Employee):
    def __init__(self, name, salary, yearlyBonus):
        Employee.__init__(self, name, salary) 
Run Code Online (Sandbox Code Playgroud)

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

class Executive(Employee):
    def __init__(self, *args, yearlyBonus):
        super(Executive, self).__init__(*args)
Run Code Online (Sandbox Code Playgroud)

使用super()而不是调用父类的__init__方法.它使多重继承更容易.


Joh*_*nck 5

只需查看发生错误的代码,并继续查看,直到您发现不匹配的内容为止:

def __init__(self, name, wage, yearlyBonus):
    Employee.__init__(self, name, salary) 
Run Code Online (Sandbox Code Playgroud)