objects learn functions constructors classes and python python-2.7 inheritance super new-style-class

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í:

  1. 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.

  2. 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()