Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/05/2010, 12:25
refreegrata
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 9 meses
Puntos: 27
Respuesta: duda con herencia y con decoradores(novato)

Ya, miren, me olvide un poco de los decoradores. Voy a intentar harcelo de otra forma.
Ahora tengo lo siguiente:
Código PHP:
#!/usr/bin/env python
# -*- coding: utf-8 -*
import psycopg2
class conexion(object):
    
''' clase para conectar '''

    
def __init__(self):
        
self.__host 'localhost'
        
self.__dbname 'asdasdsad'
        
self.__user 'asdsadsa'
        
self.__password 'sadsad'
        
# self.__conexion
        # self.__cursor
#------------------------------------------------------------------------------------
#--------------------------------------CONEXION--------------------------------------
#------------------------------------------------------------------------------------
    
def conexionAbrir(self):
        
''' abrir conexion '''
        
try:
            
self.__conexion psycopg2.connect('host='+self.__host+' dbname='+self.__dbname+' user='+self.__user+' password='+self.__password)
        
except:
            return 
False
        
return True

    def conexionCerrar
(self):
        
''' cerrar conexion '''
        
try:
            
self.__conexion.close()
        
except:
            return 
False
        
return True

    def conexionSentencia
(selfinstruccion, *parametro):
        
''' ejecutar sentencia '''
        
try:
            
self.__cursor.execute(instruccionparametro)
        
except:
            return 
False
        
return True

    def conexionCommit
(self):
        try:
            
self.__conexion.commit()
        
except:
            return 
False
        
return True

    def conexionRollback
(selfcommit True):
        try:
            
self.__cursor.rollback()
        
except:
            return 
False
        
return True
#------------------------------------------------------------------------------------
#---------------------------------------CURSOR---------------------------------------
#------------------------------------------------------------------------------------
    
def cursorAbrir(self):
        
''' crear cursor '''
        
try:
            
self.__cursor self.__conexion.cursor()
        
except:
            return 
False
        
return True

    def cursorCerrar
(self):
        
''' cerrar cursor '''
        
try:
            
self.__cursor.close()
        
except:
            return 
False
        
return True

    def cursorFetchall
(self):
        try:
            return 
self.__cursor.fetchall()
        
except:
            return 
False

    def cursorFetchmany
(selfdimension):
        try:
            return 
self.__cursor.fetchmany(dimension)
        
except:
            return 
False

    def cursorFetchone
(self):
        try:
            return 
self.__cursor.fetchone()
        
except:
            return 
False

    def getCursor
(self):
        return 
self.__cursor

    cursor 
property(getCursor
Código PHP:
#!/usr/bin/env python
# -*- coding: utf-8 -*
from dato.conexion import conexion
class tabla1(conexion):
    
''' clase para conectar a tabla '''

    
def __init__(self):
        
conexion.__init__(self)

    
def sentencia(selff, *args, **kw_args):
        if 
conexion.conexionAbrir(self) and conexion.cursorAbrir(self):
            
error f(*args, **kw_args)
        else:
            
error True
        conexion
.cursorCerrar(self)
        
conexion.conexionCerrar(self)
        return 
error

    def insert
(self, *informacion):
        return 
self.sentencia(self.__insert,*informacion)
    
    
def __insert(self, *informacion):
        for 
i in informacion:
            
conexion.conexionSentencia(self,'insert into tabla1 (informacion) VALUES (%s)',i)
        return 
conexion.conexionCommit(self)

    
def update(self, *informacion, **restriccion):
        
pass

ab 
tabla1()
ab.insert("ai","oi"
Código PHP:
#!/usr/bin/env python
# -*- coding: utf-8 -*
from dato.conexion import conexion
class tabla2(conexion):
    
''' clase para conectar a tabla '''

    
def __init__(self):
        
conexion.__init__(self)

    
def sentencia(selff, *args, **kw_args):
        if 
conexion.conexionAbrir(self) and conexion.cursorAbrir(self):
            
error f(*args, **kw_args)
        else:
            
error True
        conexion
.cursorCerrar(self)
        
conexion.conexionCerrar(self)
        return 
error

    def insert
(self, *informacion):
        return 
self.sentencia(self.__insert,*informacion)

    
def __insert(self, *informacion):
        for 
i in informacion:
            
conexion.conexionSentencia(self,'insert into tabla2 (informacion1,informacion2,numero) VALUES (%s,%s,%s)',*i)
        return 
conexion.conexionCommit(self)

ab tabla2()
ab.insert(("a","b",1),("c","d",2),("e","f",3)) 
Basicamente cree una funcion sentencia, para evitarme en cada funcion en donde debiera realizar un sentencia sql el hacer
if conexion.conexionAbrir(self) and conexion.cursorAbrir(self):
error = trabajar(parametros)
else:
error = True
conexion.cursorCerrar(self)
conexion.conexionCerrar(self)
return error
Código PHP:
    def sentencia(selff, *args, **kw_args):
        if 
conexion.conexionAbrir(self) and conexion.cursorAbrir(self):
            
error f(*args, **kw_args)
        else:
            
error True
        conexion
.cursorCerrar(self)
        
conexion.conexionCerrar(self)
        return 
error 
como ven, esta funcion solo recibe los parametros y el nombre de la funcion que realizará la sentencia deseada(insert,update,select...)
el problema, como verán, es que debo volver a escribir la funcion sentencia en cada una de la clases que son herencia de conexion(tabla1, tabla2)

Mio duda es: ¿existe alguna manera de definir esa funcion en un solo lugar, sin tener que copiarla en cada clase hija?

he tratado de usar wrap, meterla en la clase padre(conexion), pero no me funciona, y no se que pudiera estar haciendo mal

No se si hay solución. Espero puedan ayudarme, y disculpen lo torpe de mi codigo(recien empeze con python, y llevaba mucho tiempo programando en un lenguaje no orientado a objetos, o sea C)

Saludos