[Python-mx] Acerca de super / herencia

Juan Barrios j.m.barrios at gmail.com
Tue Nov 8 12:23:44 EST 2016


Para aportar un poco más a la discusión sobre composición y herencia

http://www.insaneunity.com/blog/2016/10/28/winthatwar-entity-component-system/

Saludos,
jmbarrios

On Sun, Nov 6, 2016 at 4:41 PM Javier Parada <jparada_a at hotmail.com> wrote:

> Hola Ismael,
>
> Ups la verdad una disculpa, toda tu explicación no la pude procesar tan
> bien, pero leí un artículo que me ayudó a entender mejor.
>
> Asociación: podemos crear un objeto cliente y un objeto tarjetacredito y
> el objeto cliente puede o no tener una tarjetacredito, si tiene se puede
> asignar en algún momento una tarjetacredito con algún método, por ejemplo,
> setTarjetaCredito, es decir, cliente es independiente de tarjetacredito,
> puede existir el cliente sin tarjetacredito.
>
> Composición: todos los objetos deben existir y no pueden ser
> independientes uno de otro, por ejemplo, en el artículo que leí dan el
> ejemplo de un objeto computadora se compone también entre otras cosas de un
> objeto teclado, no puede existir computadora si no existe teclado, y
> teclado no puede existir si no existe computadora.
>
> Al menos estas analogías me estan ayudando a entender un poco más paso a
> paso.
>
> Gracias a todos por su tiempo.
> Saludos,
> Javier
>
>
> El 05/11/2016 a las 07:51 a. m., Ismael Venegas Castelló escribió:
>
> Javier,
>
> Te dejo este enlace sobre herencia y composicion:
>
> https://en.m.wikipedia.org/wiki/Composition_over_inheritance
>
> Imagina que tienes una clase que debe comportarse como un diccionario, es
> decir deseas que la API para diccionarios funcione con tu objeto. Puedes
> heredar de dict o incrustar un campo que es un dict, es decir componer tu
> objeto mediante otros objetos.
>
> En el ejemplo anterior tal vez la herencia sea lo las sencillo. Pero que
> pasa si ademas necesitas APIs de archivos y otra cosa. Heredar de varios de
> estos objetos dispares puede crear una "monstruocidad" por asi decirlo.
>
> Mientras que usar composicion lo haria un pelin mas limpio. Pero como
> siempre ...si la implementacion es dificil de explicar, entonces es mala
> idea ... si la implementacion es facil de explicar PUEDE que sea una buena
> idea! :-)
>
> On Nov 5, 2016 12:39 AM, "Cesar Cardenas Desales" <
> ccdesales+pythonmx at gmail.com> wrote:
>
> Hola Hector:
>
> El grupo de Python Argentina ha recopilado algunos recursos que te pueden
> interesar:
>
> https://argentinaenpython.com/quiero-aprender-python/
>
> El que aprendas Python dentro de 24 horas o menos depende de tus
> conocimientos previos, entre otras cosas.
>
> El ejercicio o tarea que mencionas me parece un tanto fuera de lo común.
> De buenas a primeras se me ocurre que puedes usar el modulo subprocess:
>
> from subprocess import call
> call(["ls", "-l"])
>
> Si lo que necesitas es el reverso:
>
> $output = shell_exec('python -c "import this"');
>
> 2016-11-04 21:34 GMT+01:00 Héctor de la Rosa Mondragón <
> hrosa at cesvimexico.com.mx>:
>
> Hola Buenos Días a todos
>
> Estoy comenzando a programar en Python algún libro Digital en PDF que me
> indiquen para aprender en menos de 24hrs.
>
>
>
> Y una pregunta más Alguno de ustedes sabrá como puedo yo recibir de un
> script de PHP un parámetro en Python ejecute un script Python y retorne su
> valor nuevamente a PHP gracias adelantadas.
>
>
>
> *De:* Python-mx [mailto:python-mx-bounces+hdelarosam=gmail.com at python.org]
> *En nombre de *Javier Parada
> *Enviado el:* viernes, 04 de noviembre de 2016 09:57 a.m.
> *Para:* python-mx at python.org
> *Asunto:* Re: [Python-mx] Acerca de super / herencia
>
>
>
> Hola,
>
> @Noe: Gracias por tu comentario.
>
> @Cesar: Aquí introduces lo que es para mí un nuevo concepto "composicion
> de objetos" (habrá que estudiar sobre el tema), pero entre líneas leo que
> en éste ejemplo el programador está usando super innecesariamente, al menos
> de acuerdo a la información que leí esa fue mi conclusión, eso está en
> línea con tu comentario:
>
> ya que es muy facil abusar del concepto de herencia y llegar a soluciones
> sub-optimas.
>
> Saludos,
> Javier
>
> El 03/11/2016 a las 11:38 p. m., Cesar Cardenas Desales escribió:
>
> Lo que puedo agregar es que aunque frameworks como PyQT requieren que el
> usuario utilice herencia, fuera de ese caso de uso en general se recomienda
> usar composicion de objetos en vez de ello, ya que es muy facil abusar del
> concepto de herencia y llegar a soluciones sub-optimas.
>
>
>
> 2016-11-04 3:26 GMT+01:00 Javier Parada <jparada_a at hotmail.com>:
>
> Hola amigos,
>
> Siguiendo con el aprendizaje con Python, estoy estudiando éste código y
> algo que no sé que hace es super, buscando información me encontré de todo
> tipo acerca de super y la herencia multiple en Python, pero una de las
> descripciones que me fue muy útil para entender es esta:
>
> *super,* que es una función que sirve para acceder a atributos que
> pertenecen a una clase superior.
>
> y además también me enteré de la propiedad mro que es una lista donde se
> guarda digamos el orden en el que se ejecutan los métodos de las clases,
> estamos bien?.
>
> Así que regresando al código que estoy estudiando es este:
>
> class Login(QMainWindow):
>     def __init__(self):
>         super(Login, self).__init__()
>         print(Login.__mro__)
>         #print("__mro__:", [x.__name__ for x in Login.__mro__])
>         self.icon = QIcon()
>         self.icon.addPixmap(QPixmap("./Resource/Images/favicon.png"))
>         self.setWindowIcon(self.icon)
>         self.setupGui()
>         self.LoginGui()
>         self.database = Database()
>
>     def setupGui(self):
>         # Login Window
>         self.setMinimumSize(900, 650)
>         self.setMaximumSize(900, 650)
>         self.setWindowTitle("Inicia sesión | Sistema de Control Escolar")
>         self.setObjectName("ventana_principal")
>
> ésta es la salida de mro:
>
> (<class 'Application.Login.Login.Login'>, <class
> 'PyQt4.QtGui.QMainWindow'>, <class 'PyQt4.QtGui.QWidget'>, <class
> 'PyQt4.QtCore.QObject'>, <class 'sip.wrapper'>, <class
> 'PyQt4.QtGui.QPaintDevice'>, <class 'sip.simplewrapper'>, <class 'object'>)
>
> entonces con la información que leí y con la salida de mro, creo que aquí
> únicamente lo que el autor está haciendo es que llama a super porque la
> clase padre de la clase Login es QMainWindow y entonces puede hacer uso de:
>
> self.setWindowIcon(self.icon)
> self.setMinimumSize(900, 650)
> self.setMaximumSize(900, 650)
> self.setWindowTitle("Inicia sesión | Sistema de Control Escolar")
> self.setObjectName("ventana_principal")
>
> estoy bien?, alguna observación?.
>
> Gracias por su tiempo.
>
> Saludos,
> Javier
>
>
> _______________________________________________
> Python-mx mailing list
> Python-mx at python.org
> https://mail.python.org/mailman/listinfo/python-mx
>
>
>
>
>
>
> _______________________________________________
>
> Python-mx mailing list
>
> Python-mx at python.org
>
> https://mail.python.org/mailman/listinfo/python-mx
>
>
> _______________________________________________ Python-mx mailing list
> Python-mx at python.org https://mail.python.org/mailman/listinfo/python-mx
>
> _______________________________________________ Python-mx mailing list
> Python-mx at python.org https://mail.python.org/mailman/listinfo/python-mx
>
> _______________________________________________
> Python-mx mailing listPython-mx at python.orghttps://mail.python.org/mailman/listinfo/python-mx
>
> _______________________________________________
> Python-mx mailing list
> Python-mx at python.org
> https://mail.python.org/mailman/listinfo/python-mx
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-mx/attachments/20161108/299c5154/attachment-0001.html>


More information about the Python-mx mailing list