Экземпляр класса в Python - PullRequest
0 голосов
/ 14 марта 2012

У меня проблема с использованием экземпляра класса в Python.Я создал новый класс ora, который наследует класс connect из пакета cx_Oracle.Когда я пытаюсь запустить этот код, я получаю информацию

Файл "pyt.py", строка 12, в myquery ora.myConnect.cursor () AttributeError: У объекта 'NoneType' нет атрибута 'cursor'

Итак, Python не может распознать, что в ora.myConnect хранится ссылка на экземпляр.Я не t know what can be reason of this error and what it s неправильно с кодом.

from cx_Oracle import connect

class ora(connect):
  myConnect = None

  def __init__(self,connstr):    
    ora.myConnect = connect.__init__(self,connstr)


  def myquery(self):
      ora.myConnect.cursor()
      ora.myConnect.cursor.execute("SELECT * FROM table")
      ora.myConnect.cursor.close()   



connstr = 'user/passwd@host:port/sid' 
connection = ora(connstr)      
connection.myquery()                 
connection.close()

РЕДАКТИРОВАТЬ

У меня ve tried to replace ora to self but still Python don нет доступа к экземпляру

from cx_Oracle import connect

class ora(connect):
  myConnect = None

  def __init__(self,connstr):    
    self.myConnect = connect.__init__(self,connstr)
  def myquery(self):
      self.myConnect.cursor()
      self.myConnect.cursor.execute("SELECT * FROM table")
      self.myConnect.cursor.close()   

Ошибка: self.myConnect.cursor () AttributeError: объект 'NoneType' не имеет атрибута 'cursor'

EDIT2 Этот код работает без ООП, для меня self.myConnect должен указывать ссылку на экземпляр объекта, и этот объект должен содержать метод cursor ()

import cx_oracle
connstr = 'user/passwd@host:port/sid' 
connection = cx_oracle.connect(connstr)                   
cursor = connection.cursor()                              
cursor.execute("SELECT * FROM table")
cursor.close()
connection.close()

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Кажется, что вы хотите self:

class ora(connect):
    myConnect = None

    def __init__(self, connstr):    
        self.myConnect = connect.__init__(self, connstr)

    # ...

ora - это имя класса, а не экземпляра.

Обновление Попробуйтеследующее:

from cx_Oracle import connect

class ora:
    myConnect = None

    def __init__(self, connstr):    
        self.myConnect = connect(connstr)

    def myquery(self):
        self.myConnect.cursor()
        self.myConnect.cursor.execute("SELECT * FROM table")
        self.myConnect.cursor.close()   
1 голос
/ 14 марта 2012

Почему вы хотите, чтобы self.myConnect ссылался на экземпляр connect?Это полное недоразумение ООП.ora экземпляр - это экземпляр connect.self.cursor - это место, где вы найдете курсор.

Вот как должен выглядеть ваш код:

class ora(connect):

  def __init__(self,connstr):    
    super(ora, self).__init__(connstr)

  def myquery(self):
    self.cursor.execute("SELECT * FROM table")
    self.cursor.close()   

В любом случае, __init__ никогда не должен ничего возвращать, поэтому установите self.myConnect ввозвращаемое значение всегда приведет к тому, что оно будет привязано к None.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...