Как расширить класс OracleCursor от cx_Oracle

Используя Python 2.7.12 и пакет cx_Oracle Я пытаюсь создать расширенный класс того, что пакет вызывает OracleCursor . Я просто хочу наследовать методы из суперкласса и распространяться на некоторые пользовательские методы.

Сначала я получаю OracleCursor

 import cx_Oracle conn = cx_Oracle.connect(username, password, dsn) cursor = conn.cursor() 

и тогда у меня есть следующее

 >>> type(cursor)Out[6]: OracleCursor >>> isinstance(cursor, cx_Oracle.Cursor) True 

Можно было бы подумать, что это достигается

 class ExtendedCursor(cx_Oracle.Cursor): def hello_world(self): print('Hello world') extended = ExtendedCursor(cursor) 

но я получаю TypeError: argument 1 must be cx_Oracle.Connection, not OracleCursor . Для меня эта ошибка не имеет смысла. Кроме того, я не могу использовать OracleCursor как мой суперкласс, так как он не распознается как класс.

One Solution collect form web for “Как расширить класс OracleCursor от cx_Oracle”

Курсор возвращается из объекта Connection. Вам нужно создать настраиваемое соединение, которое возвращает ваш ExtendedCursor.

 import cx_Oracle as cxo class MyCursor(cxo.Cursor): def helloWorld(self): print "helloWorld" class MyConnection(cxo.Connection): def cursor(self): return MyCursor(self) if __name__ == '__main__': conStr = '<user>/<password>@127.0.0.1:1521/xe' db = MyConnection(conStr) c = db.cursor() print c c.execute('select 1+1 from dual') print(c.fetchall()) c.helloWorld() 

возвращает:

 <__main__.MyCursor on <__main__.MyConnection to ...@127.0.0.1:1521/xe>> [(2,)] helloWorld 
  • Добавление перегрузки в поведении Python x + y vs y + x
  • Python - Могу ли я получить доступ к объекту, который звонит мне?
  • Добавление общих атрибутов к методу Behave
  • Назначить внешнюю функцию переменной класса в Python
  • Назначение динамического значения переменной класса изнутри класса
  • Какие части виртуального пространства необходимо изменить, чтобы переместить его?
  • Доступ к статической переменной из статического метода
  • python: абстрактный базовый класс '__init __ (): инициализация или проверка?
  • Python - лучший язык программирования в мире.