El método de propiedad en Python no está devolviendo el valor correcto.
Estoy tratando de resolver la pregunta en la que se me pide usar el método de propiedad para contar la cantidad de veces que se crean los círculos. A continuación se muestra el código para lo mismo.
import os
import sys
Agregar implementación de la clase Circle a continuación
class Circle:
counter = 0
def __init__(self, radius):
self.radius = radius
Circle.counter = Circle.counter + 1
def area(self):
return self.radius * self.radius * 3.14
def counters():
print(Circle.counter)
no_of_circles = property(counter)
Si el nombre es igual a “main”:
res_lst = list()
lst = list(map(lambda x: float(x.strip()), input().split(',')))
for radius in lst:
res_lst.append(Circle(radius).area())
print(str(res_lst), str(Circle.no_of_circles))
El código anterior da una salida correcta para el área, pero el contador debería ser 3 y en cambio obtengo la siguiente salida. A continuación se muestra la salida para la entrada = 1,2,3.
[3.14, 12.56, 28.26] <property object="" at="" 0x0000024ab3234d60="">
He intentado todo, pero sin éxito. En la sección principal del código, no_of_circles
se llama como Circle.no_of_circles
, lo que me sugiere que utilizará el método de propiedad de Python. Pero la salida es incorrecta. Por favor, ayúdame a encontrar dónde estoy cometiendo un error.
davy.ai
Para utilizar el método de propiedad para contar el número de veces que se crean los círculos, el método
no_of_circles
debe ser definido como un método getter con el decorador@property
. Además, el métodocounters()
debe ser decorado con el decorador@staticmethod
ya que no accede a las propiedades de instancia o de clase.A continuación se muestra la implementación corregida:
En la implementación corregida, el método
no_of_circles
se define como una propiedad con el decorador@property
. El métodocounters()
está decorado con el decorador@staticmethod
para indicar que es un método estático.Además, el statement
Circle.counter = Circle.counter + 1
en el método__init__
se reemplaza porCircle.counter += 1
para incrementar la variablecounter
.Para obtener la salida correcta, el método
no_of_circles
debe ser llamado con una instancia de la claseCircle
, como se muestra enprint(str(res_lst), str(Circle().no_of_circles))
. Esto utilizará la propiedadno_of_circles
para obtener el valor de la variablecounter
.Con estos cambios, la salida para el input = 1,2,3 será: