Tengo el siguiente código de Python 2.7:
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()
Estoy tratando de extender el __init__()
para que cuando cree un “Ojo” haga un montón de otras cosas (self.some_other_defined_stuff ()), además de lo que Frame configura. Frame.__init__()
debe ejecutarse primero.
Obtuve el siguiente error:
super(Eye, self).__init__() TypeError: must be type, not classobj
Que no entiendo la causa lógica de. ¿Alguien puede explicar por favor? Estoy acostumbrado a escribir ‘super’ en ruby.
Hay dos errores aquí:
super()
solo funciona para clases de nuevo estilo ; use el object
como clase base para Frame
para que use la semántica de estilo nuevo.
Aún debe llamar al método anulado con los argumentos correctos; pasar la image
a la llamada __init__
.
Entonces el código correcto sería:
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
debe extender el object
porque solo las nuevas clases de estilo admiten la super
llamada que haces en Eye
por lo que:
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()
Por favor escriba: __metaclass__ = type
en la parte superior del código y luego podremos acceder a la súper clase
__metaclass__ = type class Vehicle: def start(self): print("Starting engine") def stop(self): print("Stopping engine") class TwoWheeler(Vehicle): def say(self): super(TwoWheeler,self).start() print("I have two wheels") super(TwoWheeler,self).stop() Pulsar=TwoWheeler() Pulsar.say()
Hola ver mis códigos de trabajo para 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)