2017-10-19 79 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)