Muchas gracias por todos los comentarios, me han ayudado mucho. Saludos.
El 6 de mayo de 2014, 18:24, Miguel Beltran R. <yourpa...@gmail.com>escribió: > Chema, si no lo tienes en tu blog, deberias agregarlo > > > El 4 de mayo de 2014, 10:40, Chema Cortes <pych...@gmail.com> escribió: > >> El 3 de mayo de 2014, 23:26, Cristian Godoy >> <cristiangod...@gmail.com>escribió: >> >> Hola vengo de programar en Java y recién estoy comenzando a conocer la >>> sintaxis de Python. Quisiera saber si existen las interfaces y clases >>> abstractas en Python. >>> Muchas gracias. >>> >>> Las clases abstractas en python no son otra cosa que avisos que se hacen >> a quien las vaya a usar para que no las instancie y sólo las use para crear >> subclases. Pero python es un lenguaje dinámico, por lo que siempre será >> posible instanciar cualquier clase y siempre derivar subclases a partir de >> cualquier clase (hay formas de cambiar este comportamiento, pero son casos >> raros). >> >> En cuanto a los interfaces, en java se abusa de ellos para obtener algo >> de herencia múltiple. Python tiene herencia múltiple completa, por lo que >> añadir interfaces es añadir más clases a la herencia. >> >> Por otro lado, lo que sería usar interfaces como patrones estructurales >> de los atributos y métodos que debe tener un objeto, en python se conoce >> por "protocolo". Al ser dinámico, no existe chequeo de tipos de datos, por >> que hay diversas APIs que tan sólo esperan que los objetos cumplan con un >> protocolo determinado. Por ejemplo, muchas funciones esperan un objeto que >> se parezca a un objecto file, con métodos read() y write(), pero sin ser >> necesario que sean ficheros reales. De este modo, donde se pasaría un >> fichero, se puede pasar una url, la lectura de un puerto serie o un stream >> de memoria, >> >> Como es bastante tedioso andar comprobando los atributos y métodos que >> tiene un objeto para saber si cumple o no con determinado protocolo, la >> librería estándar facilita una colección de clases base abstractas >> (ABC-Abstract Base Classes) para poder fijar las relaciones entre clases, >> bien derivando de estas clases abstractas, bien registrando nuevas clases >> abstractas en esta jerarquía (siempre de un modo virtual). >> >> Tienes clases abstractas en los módulos io (streams), collections >> (estructuras de datos), numbers e importlib, así como crear nuevas con el >> mòdulo abc. Se supone que, con el tiempo, se irán ampliando. >> >> Por ejemplo: imagínate que tienes un fichero codificado que quieres que >> se codifique/decodifique al vuelo. Hay una clase abstracta llamada >> io.TextIOBase que ofrece el protocolo de fichero plano de texto. Tienes dos >> opciones: a) derivas tu clase a partir de esta clase abstracta, b) registra >> tu clase como subclase de la clase abstracta >> >> Opción 1: >> >> from io import TextIOBase >> >> class CryptoFile(TextIOBase): >> ... >> >> Opción2: >> >> from io import TextIOBase >> TextIOBase.register(CryptoFile) >> >> En esta opción, CryptoFile podría venir de otra librería que no fuera >> nuestra. >> >> >> En ambos casos se cumple: >> >> issubclass(CryptoFile, TextIOBase) >> isinstance(CryptoFile(...), TextIOBase) >> >> >> Donde se pueda pasar una instancia TextIOBase se podría pasar una >> instancia CryptoFile (no hay covariancias ni contravariancias en python). >> >> >> -- >> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": >> http://ch3m4.org/blog >> Buscador Python Hispano: http://ch3m4.org/python-es >> >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > > -- > ________________________________________ > Lo bueno de vivir un dia mas > es saber que nos queda un dia menos de vida > > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/