2016-08-11 2 views
-1

Я пишу класс для доступа к mySQL db из python.Python - не может получить доступ к свойству класса

Вот код:

#!/usr/bin/python 

import MySQLdb 
import configparser 

class db(): 

    def __init__(self): 

     try: 
      self.handler = MySQLdb.connect(host="localhost", user=user, passwd=passwd, db=dbname) 
      self.cur = self.handler.cursor() 
     except: 
      print "Couldn't connect to db" 


    def query(self, query): 

     self.lastQuery = query 
     self.res = self.cur.execute(query) 

    def close(self): 

     self.handler.close() 

Когда я пытаюсь вызвать класс, он дает мне следующую ошибку:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "db.class.py", line 6, in <module> 
    class db(): 
File "db.class.py", line 25, in db 
    self.res = self.cur.execute(query) 
NameError: name 'self' is not defined 

Я искал и часто есть люди, забывающие для определения метода с «я» в качестве аргумента. Но я включаю его.

Может ли кто-нибудь мне помочь?

Спасибо.

UPDATE:

Я проверил пробельные и вкладки, и это не проблема.

ответ

5

Ваш код имеет смешанные вкладки и пробелы, в результате чего Python запутывается в отношении каких утверждений на каком уровне отступа. Назначение self.res закончилось на уровне класса, вне метода, в котором он должен был быть частью.

Остановить смешивание вкладок и пробелов. Включите «show whitespace» в вашем редакторе, чтобы сделать проблему более заметной, и подумайте над запуском Python с флагом -tt, чтобы дать ошибку при неоднозначном смешивании вкладок и пробелов.

+0

Я уверен, что пробелы не являются проблемой. – Ign

+1

@Ign: в режиме редактирования четко отображаются табуляции и пробелы, которые могут вызвать эту ошибку, а трассировка ясно показывает, что присваивание 'self.res' вне любого метода. Вы уверены, что знаете, что искать? Если вы только отметили отступ от отображаемой версии вашего вопроса, имейте в виду, что рендеринг уценки преобразует вкладки в пробелы. Проверьте фактический исходный файл. – user2357112

Смежные вопросы