Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

Reflexion sobre Python

Consideremos que Python implementa algo parecido de lo que es la reflexion sobre otros lenguajes como java. En pYthon veremos una implementacion donde los MOP( meta-objectos), y objetos base son compilados dentro de una entidad, la Clase Object del lenguaje Python. En la implementacion, todas las funciones para agregar/modificar/borrar atributos y metodos son encapsulados en el archivo classobject.c (con este encabezado). En Python, El cambio de esencia, sobre la estructura general de lo que es un interprete, perdidademente corresponde a la “Reflexion”, a razon de que la implementacion de la misma permite el cambiar la instancia de objeto durante su ejecucion.

Expliquemoslo con algo de codigo…….

>>> #Definimos la ClassA
>>> class ClassA:
      def setdata(self, value):
        self.data = value
      def display(self):
        print 'Class A data: %s' % self.data
>>> # Definimos la ClassB
>>> class ClassB:
      def output(self):
        print 'Class B data: %s ' % self.data

>>> # Creamos una nueva instancia para la ClassA
>>> newobject = ClassA()
>>> # Establecemos data para la instancia a 23
>>> newobject.setdata(23)
>>> # Usamos un metodo de la ClassA
>>> newobject.display()
>>> Class A data: 23

>>> # Cambiamos este objeto para la clase ClassB!
>>> newobject.__class__=ClassB
>>># Usamos el metodo de la ClassB
>>> newobject.output()
Class B data: 23 

>>> newobject.display()  # metodo no existe en ClassA
Traceback (most recent call last):   # Retorna error
  File "", line 1, in ?
    newobject.display()
AttributeError: ClassB instance has no attribute 'display'

>>> # Hacemos el cambio a la ClassA
>>> newobject.__class__=ClassA
>>> # Usamos un metodo de la ClassA
>>> newobject.display()
Class A data: 23

Observen la magia!, la clase de un objeto es accesible para los programas en Python mediante el atributo __class__ y puede ser cambiada simplemente asignando un nuevo valor a dicho atributo. Esto permite a programas a desarrolladores Python, reasignar en tiempo de ejecucion alguna instancia de objeto diferente.

El Indio

October 31, 2007 @ 11:23 am

Pues yo crear Reflexion en piedra a orilla del rio Grande no necesitar Java mas que pa tonar como cafe. Reflexion?.. naaa abuelo gran Canyion no necesitar Java, el nacer reflexionando.

Solace

October 28, 2008 @ 11:11 am

Good for people to know.

RSS feed para comentarios en esta entrada · TrackBack URI

Comenta