On 6 August 2014 00:43, Jose Caballero <jcaballero....@gmail.com> wrote:
> En particular, mi colega me pregunta que por que python implementa la > funcion len( ) pero no existe el metodo len() para clases como > list, string, etc. > Sí existe, pero se llama __len__(). La existencia de algunos builtins está clara: son propiedades muy básicas útiles para muchos objetos diferentes. Si simplemente existiera el método .len(), un programador perezoso podría llamar al método correspodiente .size() o .shape() (e.g.: arrays de Numpy), y trabajar con secuencias sería mucho más difícil. ¿Cómo de larga es? ¿Tiene el método len()? Al fijar un método mágico y un builtin como alias, Python enfuerza una API concreta para cualquier tipo de secuencias. Funciones como max() o min() son operaciones muy comunes, que se benefician enormemente de estar programadas en C. De nuevo, las secuencias en la biblioteca estandard podrían haber implementado .max() en C, pero entonces tendríamos que volver a reimplementarlo para cada nuevo clase que creáramos (y la API C es dura). El caso de type() es que el intérprete de Python sabe mejor qué es cualquier objeto que ellos mismos. Podría haberse implementado como un método añadido automáticamente a cualquier objeto, pero sería añadir magia negra porque: class Nothing(): pass tendría métodos definidos, y podría ser sobreescrito: class Pranker(object): def type(self): import antrigravity return None Está claro que debería ser de sólo lectura, pero lo haría un caso especial. /David.
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/