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.
