2017-10-19 76 views
0

我努力學習Python中的超級實現,我已經嘗試了SO各種幫助線程,但我沒能實現以下代碼:訪問父類的方法錯誤

class Person: 
    def __init__(self, first, last, age): 
     self.firstname = first 
     self.lastname = last 
     self.age = age 

    def __str__(self): 
     return self.firstname + " " + self.lastname + ", " + str(self.age) 

class Employee(Person): 
    def __init__(self, first, last, age, staffnum): 
     super(Employee, self).__init__(first, last, age) 
     self.staffnumber = staffnum 

    def __str__(self): 
     return super(Employee, self).__str__() + ", " + self.staffnumber 


x = Person("Marge", "Simpson", 36) 
y = Employee("Homer", "Simpson", 28, "1007") 

print(x) 
print(y) 

有什麼不對這種語法在上面的代碼?

return super(Employee, self).__str__() + ", " + self.staffnumber 

回答

1

在Python 2.7中,存在舊層次結構的剩餘物。並非所有的類都繼承自object,這是Python 3中的默認類型。如果您沒有明確繼承object,Python將使用舊式對象,其中Super取決於此。

所有你需要做的是明確地確保所有的對象最終繼承object

class Person(object): 

在Python 3,這是「固定」。

一種替代方法是放棄超級贊成使用方法作爲類方法,這將與這兩種類型的對象工作:

Person.__init__(self,first,last,age) 
Person.__str__(self)