learn - La herencia super__init__ de Python 2.x no funciona cuando el padre no hereda del objeto
this in python class (4)
Hay dos errores aquí:
super()
solo funciona para clases de nuevo estilo ; use elobject
como clase base paraFrame
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()
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 al crear una instancia de ''Ojo'' haga un montón de otras cosas (self.some_other_defined_stuff ()), además de lo que establece Frame. 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.
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)
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()
Frame
debe extender el object
porque solo las nuevas clases de estilo admiten la super
llamada que haces en Eye
así:
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()