kat*_*e88 4 python inheritance class
这是我的家庭作业,我之前看到它发布在网站上,但看起来它没有解决,我收到的错误信息不同于之前提出问题的人.
问题的第一部分是定义从Employee继承的子类Worker,并包含一个引用另一个作为worker的管理员的属性的属性.您应该定义一个返回工人经理的方法get_manager.
例:
worker = Worker("Fred", 52000, myboss)
问题的第二部分是定义从Employee继承的子类Executive,并包含一个引用年度奖金的属性.
您应该覆盖工资方法,以根据他/她的工资和奖金计算高管薪酬.您应该在Executive Class的工资方法定义中使用Employee的工资方法.
例:
executive = Executive("Kerry", 520000, 1040000)
我的代码写在下面,我得到的错误信息是:'全局名称'薪水'未在'员工'行中定义.对于类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)
错误很清楚.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__方法.它使多重继承更容易.
只需查看发生错误的代码,并继续查看,直到您发现不匹配的内容为止:
def __init__(self, name, wage, yearlyBonus):
    Employee.__init__(self, name, salary)