【问题标题】:Access a variable in a method under a class in python在python中的类下访问方法中的变量
【发布时间】:2011-07-21 17:07:31
【问题描述】:
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()

如何在另一个类中访问变量用户名:

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)

目前用户是静态的,但是我想让这个用户变量等于从文本字段框中获取的用户名。

谁能告诉我该怎么做?

谢谢

【问题讨论】:

    标签: python class methods static global


    【解决方案1】:

    目前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)
    

    那么如果你可以从全局用户对象中访问用户名:

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

    请注意,这一切都是非常笼统的(例如,假设您一次只能支持一个用户),但它应该能够帮助您入门。

    【讨论】:

      【解决方案2】:

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

      global username
      username = ...
      

      但是,您几乎可以肯定更愿意将其存储为某个对象的属性。我不知道你的架构,所以我不能告诉你最好把它放在哪里,但是像 UserSettings 对象会很好。

      【讨论】:

      • @Jeff 您能否详细说明如何创建对象。我将尝试使用全局变量 - 但老实说我以前尝试过。这是代码,我知道它的编码非常糟糕而且非常混乱 - 但请尽量阅读它。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2023-04-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      相关资源
      最近更新 更多