Python, herencia, método super ()

Soy nuevo en Python, tengo el código debajo del cual simplemente no puedo trabajar: – Esto es herencia, tengo una clase de base circular y la heredé dentro de una clase de circle (solo herencia simple aquí).

Entiendo que el problema está dentro de la función ToString() dentro de la clase de circle , específicamente la línea, text = super(Point, self).ToString() +.. que requiere al menos un solo argumento, sin embargo, obtengo esto:

AttributeError: 'super' object has no attribute 'ToString'

Sé que super no tiene ningún atributo ToString , pero la clase Point sí.

Mi código:

 class Point(object): x = 0.0 y = 0.0 # point class constructor def __init__(self, x, y): self.x = x self.y = y print("point constructor") def ToString(self): text = "{x:" + str(self.x) + ", y:" + str(self.y) + "}\n" return text class Circle(Point): radius = 0.0 # circle class constructor def __init__(self, x, y, radius): super(Point, self) #super().__init__(x,y) self.radius = radius print("circle constructor") def ToString(self): text = super(Point, self).ToString() + "{radius = " + str(self.radius) + "}\n" return text shapeOne = Point(10,10) print( shapeOne.ToString() ) # this works fine shapeTwo = Circle(4, 6, 12) print( shapeTwo.ToString() ) # does not work 

Necesitas pasar en la clase Circle lugar:

 text = super(Circle, self).ToString() + "{radius = " + str(self.radius) + "}\n" 

super() buscará en las clases base del primer argumento para encontrar el siguiente método ToString() , y Point no tiene un padre con ese método.

Con ese cambio, la salida es:

 >>> print( shapeTwo.ToString() ) {x:0.0, y:0.0} {radius = 12} 

Tenga en cuenta que comete el mismo error en su __init__ ; no estás llamando al __init__ heredado en absoluto. Esto funciona:

 def __init__(self, x, y, radius): super(Circle, self).__init__(x ,y) self.radius = radius print("circle constructor") 

y luego la salida se convierte en:

 >>> shapeTwo = Circle(4, 6, 12) point constructor circle constructor >>> print( shapeTwo.ToString() ) {x:4, y:6} {radius = 12}