Доступ к переменной в методе в классе в Python - PullRequest
0 голосов
/ 24 марта 2011
class user_management(wx.Panel):
  def login(self):        
      # Login Function can be later integrated to allow users access to your program
      username = self.txt_Username.GetValue()
      self.frame.SetStatusText("Welcome "+username+" to the system!!")
      test = MyApp(0)
      test.MainLoop()

Как я могу получить доступ к переменной username в другом классе:

class wizard(wx.wizard.Wizard):
    def on_finished(self, evt):
        totalscore = self.totalscore
        print "Final score: %s" % (totalscore)
        user = "c1021358"
        db_file="data/data.db"
        database_already_exists = os.path.exists(db_file)    
        con = sqlite3.connect(db_file)
        cur = con.cursor()
        sql = "INSERT INTO scores (username,totalscore,topic) VALUES ('%s','%s','%s')" % (user,totalscore,tag)

В данный момент пользователь статичен, однако я хочу сделать эту переменную пользователя равной имени пользователя, взятому из поля текстового поля.

Может кто-нибудь сказать мне, как я могу это сделать, пожалуйста?

Спасибо

Ответы [ 2 ]

4 голосов
/ 24 марта 2011

В настоящее время username является локальной переменной и недоступен вне метода.Вы можете сделать его переменной-членом, выполнив что-то вроде self.username.Вероятно, было бы неплохо инициализировать его методом __init__.

РЕДАКТИРОВАТЬ: katrielalex имеет правильную идею.Вы, вероятно, хотите сохранить имя пользователя в чем-то, что не является частью вашей панели user_management.Это может быть либо глобальная переменная, либо вы можете создать класс пользователя.

class User:
    def __init__(self, username):
        self.username = username
# Create a global "current_user", with an initial username of None
current_user = User(None)

Тогда, если вы можете получить доступ к имени пользователя из глобального объекта User:

def login(self):
    global current_user
    current_user.username = self.txt_Username.GetValue()

Обратите внимание:Все это очень общее (например, это предполагает, что вы можете поддерживать только одного пользователя одновременно), но оно должно помочь вам начать работу.

1 голос
/ 24 марта 2011

Ну, вам нужно хранить значение username где-нибудь, чтобы оба метода могли его видеть.Самый простой способ сделать это, но почти наверняка не правильный, - сделать его глобальной переменной.Вы можете сделать это, используя ключевое слово global:

global username
username = ...

Однако вы почти наверняка захотите сохранить его как атрибут какого-либо объекта.Я не знаю вашу архитектуру, поэтому я не могу сказать вам, где лучше всего ее разместить, но что-то вроде User или Settings объекта было бы хорошо.

...