El día 29 de agosto de 2013 17:12, Olemis Lang <ole...@gmail.com> escribió: > On 8/29/13, Chema Cortes <pych...@gmail.com> wrote: >> El día 29 de agosto de 2013 08:24, Olemis Lang <ole...@gmail.com> escribió: > [...] >>> razón por la cual estaba creyendo conveniente tener el equivalente d >>> (Scala) >>> >>> new Class() with Trait1 with Trait2 with ... Trait_n{ >>> def transform(obj: String): obj.toLower() >>> } >>> >>> con una sintaxis más o menos así >>> >>> cls = Trait1(Trait2(... Trait_n(Class))) >>> obj = cls() >> >> No entiendo bien. La versión "decorador" que te había puesto puede >> hacer este "encadenado": >> >> cls = Trait1.register(Trait2.register(....Trait_n.register(Class))) >> >> Si lo quieres más práctico, cambia el método register por un método >> __call__ >> > > sí , lo q trataba d decir q el ejemplo está bastanate bien , solo q le > faltaría un detalle para no copiar los atributos del trait en el > namespace de la definición local de la clase , sino resolverlos > dinámicamente à la MRO. > ;)
Entiendo. Para lo que necesitas tendrías que hackear el método __getattribute__ responsable del funcionamiento de los descriptores. Sobrecargando este método en type.__getattribute__ (por ejemplo, desde una metaclase) podrías añadir a la cadena de búsqueda de atributos el conjunto de traits que quieres añadir. La mala noticia es que las optimizaciones del intérprete de python ignoran el método __getattribute__ cuando se trata de métodos especiales (eg: __str__, __len__, __hash__,...), que son, precisamente, los más interesantes para definir comportamientos. La única forma que veo que funcione correctamente algo así es copiando los métodos en la clase. > >> Otra cosa distinta es que quieras crear clases anónimas como en scala. >> Pero, según Guido, éso es sólo para listos. :-P >> > > <joke> ¡ uso Python ! soy muy listo :P </joke> > > [...] > > -- > Regards, > > Olemis - @olemislc > > Apache™ Bloodhound contributor > http://issues.apache.org/bloodhound > http://blood-hound.net > > Blog ES: http://simelo-es.blogspot.com/ > Blog EN: http://simelo-en.blogspot.com/ > > Featured article: > Google Zoo - http://goo.gl/fb/rEI8e > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ -- 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 http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/