使用Python中的继承(Using inheritance in python)

2019-08-31 16:33发布

这是我的家庭作业,我看到它之前在网站上公布,但它看起来就像是没有解决,我得到了比以前问这个问题的人不同的错误消息。

这个问题的第一部分是定义子类工人,从员工继承和包括是对其他雇员谁是工人的经理的属性。 你应该定义返回工人的管理方法get_manager。

例:

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

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

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

例:

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

我的代码如下书面和错误消息我得到的是:“全球名‘薪水行“雇员’没有定义”。 的init(自我,姓名,工资)'类执行(它的工作原理为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)

Answer 1:

该错误是相当清楚的。 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__方法。 它使多重继承更容易一些。



Answer 2:

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

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


Answer 3:

是的,你的初始化函数没有变量命名的薪水,当你在给员工通过它赋予错误。 初始化

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

当你这样做

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

其中之一相关的工资是多少? 通过了作为雇员init方法。 更好,如果你调用具有超强的Employee构造

从这个方法猜测

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

也许这是你想要的(不知道如何解释,虽然yearlyBonus)

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


Answer 4:

看的声明Executive.__init__

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

无处在那里它声明一个变量命名的salary 。 但是,当你调用父类的构造函数,

    Employee.__init__(self, name, salary) 

你问的Python传递变量命名的值, salary作为第三个参数。 Python是只是抱怨,这个变量不存在。

我想你能弄清楚如何从那里解决它。 :-)



文章来源: Using inheritance in python