es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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étodo counters() 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:

    import os
    import sys
    
    #Agregar la implementación de la clase Circle abajo
    class Circle:
        counter = 0
        def __init__(self,radius):
            self.radius = radius
            Circle.counter += 1
    
        def area(self):
            return self.radius*self.radius*3.14
    
        @staticmethod
        def counters():
            print(Circle.counter)
    
        @property
        def no_of_circles(self):
            return Circle.counter
    
    
    if __name__ == "__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))
    

    En la implementación corregida, el método no_of_circles se define como una propiedad con el decorador @property. El método counters() 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 por Circle.counter += 1 para incrementar la variable counter.

    Para obtener la salida correcta, el método no_of_circles debe ser llamado con una instancia de la clase Circle, como se muestra en print(str(res_lst), str(Circle().no_of_circles)). Esto utilizará la propiedad no_of_circles para obtener el valor de la variable counter.

    Con estos cambios, la salida para el input = 1,2,3 será:

    [3.14, 12.56, 28.26] 3
    

Comments are closed.