Python 2.x Super INIT l'héritage ne fonctionne pas quand le parent n'hérite pas de l'objet
j'ai le code python 2.7 suivant:
class Frame:
def __init__(self, image):
self.image = image
class Eye(Frame):
def __init__(self, image):
super(Eye, self).__init__()
self.some_other_defined_stuff()
j'essaie d'étendre le __init__()
méthode pour que quand j'instancie un "oeil" il fait un tas d'autres choses (soi.some_other_defined_stuff ()), en plus de ce que Frame configure. Frame.__init__()
doit courir en premier.
j'obtiens l'erreur suivante:
super(Eye, self).__init__()
TypeError: must be type, not classobj
dont je ne comprends pas la cause logique. Quelqu'un peut m'expliquer s'il vous plaît? J'ai l'habitude de taper "super" dans ruby.
3 réponses
Il y a deux erreurs ici:
super()
ne fonctionne que pour les new-classes de style; utiliserobject
comme une classe de base pourFrame
pour utiliser le nouveau style de la sémantique.vous devez quand même appeler la méthode overridden avec les bons arguments; pass in
image
__init__
appel.
donc le code correct serait:
class Frame(object):
def __init__(self, image):
self.image = image
class Eye(Frame):
def __init__(self, image):
super(Eye, self).__init__(image)
self.some_other_defined_stuff()
Frame
doit s'étendre object
parce que seules les nouvelles classes de style supportent super
vous Eye
comme ceci:
class Frame(object):
def __init__(self, image):
self.image = image
class Eye(Frame):
def __init__(self, image):
super(Eye, self).__init__(image)
self.some_other_defined_stuff()
Hi voir mon travail codes pour python 2.7
__metaclass__ = type
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)