如何在python中从另一个类访问变量?

时间:2014-08-07 22:15:36

标签: python kivy

我需要从LoginScreen类访问user_objectid并使用它来使用HighScore类中的Parse SDK访问该用户对游戏的高分。但是,我不确定如何访问此信息。以下是我的代码:

    class LoginScreen(Screen):

       def __init__(self, **kwargs):
          super(LoginScreen, self).__init__(**kwargs)
          self.gametime = BooleanProperty(False)

       _username = ObjectProperty(None)
       _password = ObjectProperty(None)
       user_objectid = ObjectProperty(None)

       def loginUser(self):

          if self._username.text != '' and self._password.text != '':
             try:
                connection = httplib.HTTPSConnection('api.parse.com', 443)
                params = urllib.urlencode({"username":self._username.text,            "password":self._password.text})
                connection.connect()
                connection.request('GET', '/1/login?%s' % params, '', {
                   "X-Parse-Application-Id": "${APPLICATION_ID}",
                   "X-Parse-REST-API-Key": "${REST_API_KEY}",
                   "Content-Type": "application/json"
                })
                result = json.loads(connection.getresponse().read())
                # Confirm valid user
                if result['objectId'] != '':
                   self.user_objectid = result['objectId']
                   return True

这是HighScore类的代码:

    class HighScore(Screen):
       def __init__(self, **kwargs):
          super(HighScore, self).__init__(**kwargs)

          # Need user_objectid from LoginScreen class here!
          user_id = ObjectProperty()


          connection = httplib.HTTPSConnection('api.parse.com', 443)
          connection.connect()
          connection.request('GET', '/1/classes/GameScore/user_id', '', {
             "X-Parse-Application-Id": "${APPLICATION_ID}",
             "X-Parse-REST-API-Key": "${REST_API_KEY}"
          })
          result = json.loads(connection.getresponse().read())
          print result['score']

1 个答案:

答案 0 :(得分:2)

首先,您在类__init__函数中定义两次属性。这将给出属性行为,必须在类级别定义,以使它们作为属性(而不仅仅是普通属性)。

对于您的主要问题,答案很简单,您的HighScore实例需要引用您的LoginScreen实例 - 如果有,请参见变量lgs,您只需访问lgs.user_objectid即可获得你想要的价值。

执行此操作的最佳方式完全取决于程序的结构,以及创建和使用这些类及其方法的位置。