2012-09-07 47 views
1

這裏是我的家庭作業:繼承調用

問題的第一部分是定義從Employee繼承和包括是對其他僱員誰是工人的經理屬性的子類Worker。您應該定義返回工人經理的方法get_manager

實施例:
worker = Worker("Fred", 52000, myboss)

問題的第二部分是定義從Employee繼承並且包括指年度獎金的屬性子類Executive

你應該重寫工資方法來計算基於他/她的工資和獎金的高管薪酬。您應該在Executive類別的工資方法的定義中使用Employee的工資方法。

例子:
executive = Executive("Kerry", 520000, 1040000)

我提出以下的代碼,但有人告訴我,「你認錯工資的執行」。我看不到錯誤是什麼。我如何做對?

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) 

回答

2

您可以使用super()調用當前類的父類:

def __init__(self, name, salary, manager): 
    super(Worker, self).__init__(name, salary) 
    self._manager = manager 
+0

我得到了同樣的評論 – Silvia

+0

你是什麼意思? –

0

你也可以做使用:

class Worker(Employee): 
    def __init__(self, name, salary, manager): 
     Employee.__init__(self, name, salary) 
     self._manager = manager 

這也將在老式類工作,如果你碰巧繼承了一個。

+0

工作,但我得到這個執行人員的工資方法現在應該調用僱員的工資方法。我試過Employee.wage(self),但評論是一樣的。請幫助 – Silvia

0

兩種方法super(parent, self).method(...)方法或parent.method(self,...)大致相同。在這兩種情況下,它都允許您從父母撥打method並將其應用於孩子。

這種方法可以__init__:它總是一個好主意,初始化一個子實例像其父:

class Worker(Employee): 
    def __init__(self, *args): 
     Employee.__init__(self, ...) 
     finish_the_initialization_of_worker 

,但該方法可以是任何東西,比如,wage

class Executive(Employee): 
    def wage(self): 
     return Employee.wage(self) + self._yearly_bonus 
+0

def工資(個體工商戶): return Employee.wage(個體經營) 但是我得到了你爲一位高管弄錯了工資。 – Silvia