[pyar] Maybe Metaprogramming?

Gustavo Ibarra ibarrags en gmail.com
Vie Sep 18 12:19:36 ART 2015


2015-09-18 12:14 GMT-03:00 Gustavo Ibarra <ibarrags en gmail.com>:
> 2015-09-17 20:03 GMT-03:00 Emiliano Reynares <reynares.emiliano en gmail.com>:
>> Gustavo,
>>
>> Las clases abstractas en Python realmente impiden la creación de instancias?
>> O en realidad fuerzan a que ciertos métodos (los abstractos) sean
>> implementados por las subclases "concretas"? Ah, me olvide de decir que
>> estoy usando Python3
>
> Emiliano, respondo hasta donde yo entiendo(me atajo por que quizás
> este pifiando)..
>
> Al margen del lenguaje Python, estos concepto como el de "clase
> abstracta" sirven para pensar como sera el modelo de clases( sus
> métodos, responsabilidades,etc!) a la hora de programar el
> requerimiento. Creo que en la teoría no existen, pero sirven acomodar
> los tantos y entender(¿estandarizar?) mejor que y como se programa
> "algo" entre varias personas.
> Es como decís, los metodos de estas clases son los que terminan siendo
> "abstracto" y cada clase de tu árbol sabrá(lo programaras) que método
> implementar( o no ). Sospecho que en esto ultimo también se cumple en
> Python, de todas maneras hasta donde te entendí, tu necesidad es un
> tema de diseño de clases(responsabilidades) que del lenguaje en si.
> Por que si un objeto de una clase no puede ser instanciado, esta puede
> avisar "no esto disponible para instanciarme"

buscando encontré esto "Unable to create an instance of abstract class"
http://stackoverflow.com/questions/13646245/is-it-possible-to-make-abstract-classes-in-python
(si entendiste mi anterior mensaje sos un capo, por que lo escribí
para la mierda)

>
> En tu lugar me inclinaría por algo por el estilo
> https://docs.python.org/2/library/abc.html que seguro ya lo viste.
> (horrible el nombre de la clase ABCs, ¿no?)
>
>> Emiliano
>>
>> 2015-09-17 19:48 GMT-03:00 Emiliano Reynares <reynares.emiliano en gmail.com>:
>>>
>>> Gracias por las respuestas, me han clarificado varias cosas.
>>> Sin embargo, tengo que aclarar que el bindeo de métodos necesito hacerlo
>>> sobre las intancias, no sobre las clases. Siguiendo el ejemplo anterior,
>>> algunos individuos de la clase A tienen bindeados métodos implementados por
>>> la clase B; pero otros individuos podrían tener bindeados métodos
>>> implementados en una clase C.
>>> Desde el punto de vista OOP, ya se que es extraño lo que intento hacer, el
>>> tema es que estoy intentando implementar un paradigma completamente distinto
>>> con los elementos actualmente disponibles en Python.
>>>
>>> Saludos!
>>>
>>> Emiliano
>>>
>>> 2015-09-17 13:42 GMT-03:00 Joaquin Duo <joaduo en gmail.com>:
>>>>
>>>>
>>>> 2015-09-17 12:35 GMT-03:00 Emiliano <reynares.emiliano en gmail.com>:
>>>>>
>>>>> Lo he visto, solo que seguiria sin poder impedir que sea instanciada la
>>>>> clase de la cual obtengo los métodos a bindear. O estoy equivocado?
>>>>
>>>>
>>>> Es difícil evitar que el programador haga lo que se de le de la gana.
>>>> Pero si tu idea es evitar malas prácticas, entonces podría generar una
>>>> excepción en __init__ "raise TypeError('no instanciable')
>>>> Supongo que podrías hacer una clase padre para todas las clases no
>>>> instanciables? (entonces heredan init)
>>>>
>>>>
>>>>>
>>>>> Emiliano
>>>>> ________________________________
>>>>> De: Daniel Moisset
>>>>> Enviado el: ‎17/‎09/‎2015 12:25 p.m.
>>>>> Para: Python Argentina
>>>>> Asunto: Re: [pyar] Maybe Metaprogramming?
>>>>>
>>>>> Algo como
>>>>> http://stackoverflow.com/questions/8544983/dynamically-mixin-a-base-class-to-an-instance-in-python
>>>>> te sirve?
>>>>>
>>>>> 2015-09-17 12:15 GMT-03:00 Emiliano Reynares
>>>>> <reynares.emiliano en gmail.com>:
>>>>>>
>>>>>> Gente,
>>>>>>
>>>>>> Tengo una consulta un poco extraña que hacerles pero espero me puedan
>>>>>> orientar. Lo que necesito es definir una estructura que me permita agrupar e
>>>>>> implementar un conjunto de métodos, los cuales serán "bindeados" a un
>>>>>> individuo que pertenece a una clase distinta, en tiempo de ejecución.
>>>>>> Por el momento lo que se me ha ocurrido es agrupar los métodos a ser
>>>>>> "bindeados" en una clase. Luego defino un método que permite bindearlos a un
>>>>>> instancia de una clase diferente. Algo así:
>>>>>>
>>>>>> class A:
>>>>>>     def bind_methods(self, cls):
>>>>>>         pass
>>>>>>
>>>>>> class B:
>>>>>>     def b1(self):
>>>>>>         pass
>>>>>>
>>>>>>     def b2(self):
>>>>>>         pass
>>>>>>
>>>>>> Luego, puedo hacer:
>>>>>>
>>>>>> foo = A()
>>>>>> foo.bind_methods(B)
>>>>>>
>>>>>> La implementación la omito para no hacer más largo el mail, pero tengo
>>>>>> eso funcionando. Sin embargo, dudo bastante que sea la manera más elegante
>>>>>> de implementar lo que estoy necesitando.
>>>>>> Primero, necesitaría que la clase en la cual agrupo los métodos a
>>>>>> "bindear" (clase B del ejemplo) no pueda ser instanciada. Aún cuando pudiera
>>>>>> lograr eso, el argumento "self" de los métodos definidos en ese contexto es
>>>>>> muy confuso (aunque luego funciona perfectamente al ser "bindeado" a la
>>>>>> instancia).
>>>>>> Alguna sugerencia/recurso que pueda consultar para conseguir una
>>>>>> implementación más elegante?
>>>>>> Espero haber sido claro,
>>>>>>
>>>>>> Saludos!
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Emiliano Reynares
>>>>>>
>>>>>> _______________________________________________
>>>>>> pyar mailing list pyar en python.org.ar
>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>
>>>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>>>
>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>>>> Argentina - http://www.usla.org.ar
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Daniel F. Moisset - Technical Leader
>>>>> www.machinalis.com
>>>>> Skype: @dmoisset
>>>>>
>>>>> _______________________________________________
>>>>> pyar mailing list pyar en python.org.ar
>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>
>>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>>
>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>>> Argentina - http://www.usla.org.ar
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> pyar mailing list pyar en python.org.ar
>>>> http://listas.python.org.ar/listinfo/pyar
>>>>
>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>
>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>> Argentina - http://www.usla.org.ar
>>>
>>>
>>
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar


More information about the pyar mailing list