Entradas populares

domingo, 7 de noviembre de 2010

descubrimiento importante y muy potente

ayer profundizando un poco mas en la programacion orientada a objetos del python, me encontre que en las ultimas versiones las clases, si estan definidas como descendientes de object, tienen el metodo __new__, este metodo, que se ejecuta antes del metodo __init__ nos permite modificar la creacion de la instancia de la clase, es decir, aunque nosotros hayamos dicho que nos cree una instancia de la clase A, podemos decirle en el metodo __new__ que lo que queremos realmente es que sea una instancia de la clase B, en otras palabras y poniendolo dentro de nuestras clases, podemos decirle siempre que nos cree un objeto de clase mayaObject y el ya se encargara de devolvernos uno de clase mesh, transform o lo que considere oportuno,

asi que me he puesto manos a la obra y he modificado la creacion de los objetos de clase mayaObject, ahora, cuando le digamos que cree una instancia de la clase, lo que hara sera mirar si hemos definido el tipo, si no lo hemos definido y un objeto con ese nombre existe en la escena mirara su tipo, si lo hemos definido pues se fiara de nosotros, una vez que sepa de que tipo tiene que ser, mira a ver si esta entre las clases que hemos definido, y si esta, pues nos devuelve un objeto de su clase

este es el metodo __init__ que he definido



tambien he tenido que crear una pequeña funcion en el __init__.py del modulo para definir __all__ que me devuelve los ficheros con las clases que he definido

para probar que tal funciona esto he creado un pequeño metodo en la clase scene que aparte de venir muy bien en el futuro, ahora nos permite testear su funcionamiento, lista_seleccionados



ya veis que es muy simple pero muy potente, nos devuelve una lista de objetos cada uno en de su propia clase de los objetos que tengamos seleccionados

esto me facilita mucho la creacion de una idea que tenia en la cabeza, las subclases apartir de la clase scene, ahora podriamos definir facilmente una clase model_scene, animation_scene o render_scene y que dependiendo del path que tenga alguno de sus metodos trabaje distinto como puede ser un check, un publica, o un renderiza

No hay comentarios:

Publicar un comentario