Una pregunta compañeros… Por que se hace uso del método len(self.data) y no self.data.<strong>len</strong>() como se implementó en la cla...

MANUEL G. PINEDA

MANUEL G. PINEDA

Pregunta
student
hace 4 años

Una pregunta compañeros…

Por que se hace uso del método len(self.data) y no self.data.len() como se implementó en la clase Array?

Y la otra pregunta es por qué puede acceder a self.data por medio de los indices el cual es un objeto de la clase Array?

Muchas gracias.

2 respuestas
para escribir tu comentario
    Carlos Caro

    Carlos Caro

    student
    hace 2 años

    Hola Manuel,

    Ahora me topé con tu pregunta 2, lo cual también tenía esa inquietud, es tanto así que mi código idéntico al que el profesor muestra no me lograba funcionar, por lo que me tocó adaptarlo en esa parte que mencionas.

    De modo que para obtener el ancho del arreglo, me tocó luego de acceder al atributo data, acceder a los "items" que son los que en sí almacenarán la información, por ser objetos generados de la clase array cuyo atributo era items.

    No sé si tiene que ver con las versiones de Python o algo así, pero se me hizo bien curioso.

    Comparto el código que adapté:

    Primero mi clase Array:

    import numpy as np from functools import reduce class Array_class(): def __init__(self, capacity, fill_value=None): self.items = list() for i in range(capacity): self.items.append(fill_value) def __len__(self): return len(self.items) def __str__(self): return str(self.items) def __iter__(self): return iter(self.items) def __getitem___(self, index): return self.items[index] def __setitem__(self, index, new_value): self.items[index] = new_value def __fillitems__(self): for i in range(len(self.items)): self.items[i] = np.random.randint(1, 100) return self.items def __sumitems__(self): return reduce(lambda a, b: a + b, self.items)

    Luego la clase que revisamos en este capítulo:

    from array_module import Array_class class Grid(): def __init__(self, rows, columns, fill_value = None): self.datos = Array_class(rows) for row in range(rows): self.datos[row] = Array_class(columns, fill_value).__fillitems__() def get_height(self): return len(self.datos) def get_width(self): return len(self.datos.items[0]) def __getitem__(self, row, col): return self.datos[row][col] def __str__(self): result = "" for row in range(self.get_height()): for col in range(self.get_width()): result += str(self.datos.items[row][col]) + " " result += "\n" return str(result)

    Finalmente, llamando de la clase:

    from grid import Grid matrix = Grid(2, 4) print(matrix)
    Jeffersson Muñoz Torres

    Jeffersson Muñoz Torres

    student
    hace 4 años

    Respondiendo tu primera pregunta cualquiera de las dos formas son validas nos dan la misma respuesta, cualquiera de las dos formas al usar esta correcto.. Recuerdo que en la programacion hay muchas formas de hacer lo mismo 😁 . Y con respecto a la segunda accediendo a la fila 0 de la tabla, como solo quiere saber el ancho de la tabla seria igual que mire el largo en la fila 1,2 ,3 o 50 😅.. pero digamos como mínimamente siempre existirá la primera fila por eso se ubica alli. Ademas, recuerda que esta usando un array dentro de un array por eso esta accediendo a un array y no a un elemento.

Curso de Estructuras de Datos con Python

Curso de Estructuras de Datos con Python

Progresa de listas a queues y linked lists usando Python. Crea estructuras de datos como arrays y nodos, optimiza procesos y desarrolla software eficiente aplicando stacks y queues. Ideal para quienes buscan manejar datos dinámicos.

Curso de Estructuras de Datos con Python
Curso de Estructuras de Datos con Python

Curso de Estructuras de Datos con Python

Progresa de listas a queues y linked lists usando Python. Crea estructuras de datos como arrays y nodos, optimiza procesos y desarrolla software eficiente aplicando stacks y queues. Ideal para quienes buscan manejar datos dinámicos.