在python中的类下访问方法中的变量

在python中的类下访问方法中的变量,python,class,methods,static,global,Python,Class,Methods,Static,Global,如何在另一个类中访问变量username: 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("Welco

如何在另一个类中访问变量username:

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()
目前用户是静态的,但是我想让这个用户变量等于从文本字段框中获取的用户名

谁能告诉我怎么做


谢谢

当前
用户名
是一个局部变量,无法在方法之外访问。您可以通过执行类似于
self.username
的操作将其作为成员变量。用
\uuuu init\uuuu
方法初始化它可能是个好主意

编辑:KatrieleAlex的想法是对的。您可能希望将用户名存储在不属于用户管理面板的内容中。这可以是一个全局变量,也可以创建一个用户类

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)
然后,如果您可以从全局用户对象访问用户名:

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

请注意,这是非常一般的(例如,这假设您一次只能支持一个用户),但它应该能够让您开始

当前
username
是一个局部变量,无法在方法之外访问。您可以通过执行类似于
self.username
的操作将其作为成员变量。用
\uuuu init\uuuu
方法初始化它可能是个好主意

编辑:KatrieleAlex的想法是对的。您可能希望将用户名存储在不属于用户管理面板的内容中。这可以是一个全局变量,也可以创建一个用户类

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)
然后,如果您可以从全局用户对象访问用户名:

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

请注意,这是非常一般的(例如,这假设您一次只能支持一个用户),但它应该能够让您开始

那么,您需要将
username
的值存储在两种方法都可以看到的地方。要做到这一点,最简单的方法(但几乎肯定不是正确的方法)是将其设置为全局变量。您可以使用
global
关键字执行此操作:

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

但是,您几乎肯定更希望将其存储为某个对象的属性。我不知道你的体系结构,所以我不能告诉你最好把它放在哪里,但是像
用户
设置
对象这样的东西会很好。

好吧,你需要把
用户名
的值存储在两种方法都能看到的地方。要做到这一点,最简单的方法(但几乎肯定不是正确的方法)是将其设置为全局变量。您可以使用
global
关键字执行此操作:

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

但是,您几乎肯定更希望将其存储为某个对象的属性。我不知道你的体系结构,所以我不能告诉你最好把它放在哪里,但是像
用户
设置
对象这样的东西会很好。

@Jeff你能详细介绍一下如何创建对象吗。我将尝试使用全局变量,但老实说,我以前也尝试过。这是代码,我知道它的编码非常糟糕,非常混乱,但请尽你最大的努力阅读它。感谢you@Jeff你能详细说明一下如何创建这个对象吗。我将尝试使用全局变量,但老实说,我以前也尝试过。这是代码,我知道它的编码非常糟糕,非常混乱,但请尽你最大的努力阅读它。非常感谢。