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.

¿Cuál es la mejor forma de crear una lista de objetos?

food_data es una variable que contiene datos JSON. Usando los datos, quiero crear una lista de objetos Food, de esta manera:

foods = []
for data_row in food_data:
    foods.append(Food(data_row))

Así es como se ve mi clase Food en este momento:

class Food(dict):
    """Al heredar de dict, los objetos Food se vuelven automáticamente serializables para el formato JSON"""

    def __init__(self, data):
        """Crea un objeto de comida serializado con campos deseados"""
        id = data["id"]
        name = data["title"]
        image = data["image"]

        super().__init__(self, id=id, name=name, image=image)

Y aquí hay algunos datos de ejemplo:

[
    {
        "id": 738290,
        "title": "Pasta with Garlic, Scallions, Cauliflower & Breadcrumbs",
        "image": "https://spoonacular.com/recipeImages/716429-312x231.jpg",
    },
    {
        "id": 343245,
        "title": "What to make for dinner tonight?? Bruschetta Style Pork & Pasta",
        "image": "https://spoonacular.com/recipeImages/715538-312x231.jpg",
    }
]

¿Existe un método que pueda escribir para la clase Food que tome los datos y devuelva una lista de diferentes versiones de sí misma?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes agregar un método de clase a la clase Food que tome los datos y devuelva una lista de objetos de tipo Food. Aquí tienes un ejemplo de implementación:

    class Food(dict):
        """ al heredar de dict, los objetos de tipo Food se vuelven automáticamente serializables para el formato JSON """
    
        def __init__(self, data):
            """ crea un objeto de tipo Food serializado con los campos deseados """
            id = data["id"]
            name = data["title"]
            image = data["image"]
    
            super().__init__(self, id=id, name=name, image=image)
    
        @classmethod
        def create_from_list(cls, data_list):
            """ crea una lista de objetos de tipo Food a partir de una lista de datos """
            foods = []
            for data in data_list:
                foods.append(cls(data))
            return foods
    

    Luego puedes utilizar este método para crear una lista de objetos de tipo Food de la siguiente manera:

    foods = Food.create_from_list(food_data)
    

    Esto creará una lista de objetos de tipo Food, donde cada objeto contendrá las propiedades id, name e image del diccionario correspondiente en tu lista original food_data.

Comments are closed.