"Piratearle" las propiedades a un objeto en Python
import uno,dos,tres
if "uno":
refrerencia = uno()
elif "dos":
referencia = dos()
else:
referencia = tres()
Una forma de acercarse seria usar esto:
class wrapper:
def __init__(self,modulo):
moduloobj = __import__("paquete",globals(),locals(),[modulo])
referencia = vars(moduloobj)[modulo]
self.__empapelado = referencia()
def Query(self,metodo,*args):
'''
@param string metodo: Nombre del metodo en cadena
@param *args: argumentos a pasar al metodo.
'''
met = getattr(self.__empapelado,metodo)
if callable(met):
return met(*args) #ejecutamos el metodo y regresamos lo que nos regrese
a = wrapper("uno") #o "dos", o "tres"
a.Query("imprimeEsto","Texto a imprimir")
a.Query("imprimeEsto","Texto a imprimir")
Esto, desde mi punto de vista es ideal, pues tu codigo es limpio, pero tal vez quieres hacer el empapelado sobre un proyecto que ya tiene rato jalando, y que todo se hace referencia a una clase, pero, quieres que esta clase ahora sea el "empapelado". Puedes Piratearle las propiedades a otro objeto, asi:
#!/usr/bin/env python
import paquete
class Pirata:
'''
Se piratea las propiedades de un objeto.
'''
def __init__(self,modulo,objeto):
'''
Constructor
'''
moduloobj = __import__(paquete,globals(),locals(),[modulo])
referencia = vars(moduloobj)[modulo]
pirateable = getattr(referencia,objeto)()
for i in dir(pirateable):
newkey = i.replace("_%s_"%objeto,"_Pirata_")
self.__dict__[newkey] = getattr(pirateable,i)
a = test.Pirata("modulo","clase")
a.imprimeEsto("Texto a Imprimir")
a.imprimeEsto("Texto a Imprimir")
De esta forma, no cambias nada en tu codigo que ya tienes, simplemente, en alguna parte de tu codigo, indicas que el "empapelado" ha de piratearle las propiedades a otro objeto que haga las operaciones necesarias.





# Re: "Piratearle" las propiedades a un objeto en Python
tal como lo sospeche desde un principio. B) no entendi ni papas!