¿Cómo invocar métodos en el mismo objeto singleton en Python?
from future import annotations
import cx_Oracle as oracle
class Connection(oracle.Connection):
__connection = None
@classmethod
def create(cls) -> Connection:
"""Retorna un objeto singleton de la clase cx_Oracle.Connection."""
if not cls.__connection:
cls.__connection = oracle.connect(
user="xxx",
password="xxx",
dsn="xxx",
mode=oracle.SYSDBA
)
return cls.__connection
“””
Quiero usar un objeto de conexión de base de datos singleton en mi proyecto para evitar crear una conexión más de una vez. En este ejemplo, el método oracle.conexion
devuelve la instancia de la clase padre (que es cx_Oracle.Connection
).
Mi pregunta es cómo puedo devolver una instancia de Connection
(que es la clase que creé) en lugar de la clase cx_Oracle.Connection
. Porque quiero invocar algunos métodos en mi objeto singleton, como;
connection = Connection.create()
connection.execute()
Solo mi clase Connection
tendrá el método execute
, no la clase padre.
“””
davy.ai
Una forma de lograr esto es creando un método envoltorio en tu clase
Connection
que devuelva una instancia de sí misma en lugar de la clase padrecx_Oracle.Connection
. Aquí tienes un ejemplo:En esta actualizada clase
Connection
, el métodocreate
devuelve una instancia de la claseConnection
en lugar de la clase padrecx_Oracle.Connection
. Lo hace envolviendo la llamadaoracle.connect
dentro del constructor deConnection
y devolviendo la instancia resultante.Ahora, cuando llames a
Connection.create()
, obtendrás una instancia de la claseConnection
que tiene el métodoexecute
disponible para utilizarlo de esta manera: