2017-10-19 56 views
0

Je suis en train d'apprendre super application en Python et j'ai essayé différents fils d'aide sur le SO, mais je ne suis pas en mesure de mettre en œuvre le code suivant:Accès erreur de méthode de classe parent

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) 

Quel est le problème avec cette syntaxe dans le code ci-dessus?

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

Répondre

1

En Python 2.7, il existe des restes de l'ancienne hiérarchie. Toutes les classes héritent de object, qui est la valeur par défaut dans Python 3. Si vous n'héritez pas explicitement object Python utilisera des objets de style ancien, qui échouent avec Super qui en dépend.

Tout ce que vous devez faire est de faire explicitement que tous vos objets éventuellement hériter object:

class Person(object): 

En Python 3 ceci est « fixe ».

Une alternative est de renoncer à super en faveur de l'utilisation des méthodes telles que les méthodes de classe, qui travaillera avec les deux types d'objets:

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