【问题标题】:Python How to re-assign a static variable value of a python class with a return value of methodPython如何使用方法的返回值重新分配python类的静态变量值
【发布时间】:2016-10-03 11:32:12
【问题描述】:

我试图在类中声明一个静态变量。我正在尝试在函数中添加代码的返回值。

返回值分配给类内部的静态变量,但是当我尝试创建该类的对象并从另一个类访问静态变量值时,它仍然返回旧值。

class Login(Base):
      token = ''
      def run(self):
           token=keystone.get_raw_token_from_identity_service('http://localhost:35357/v3,
username=username,                                             user_domain_name='default,                                         password=passwrd,                                                                      project_name=project,                                                     project_domain_name='default')

      def auth_token(self,token):
          self.token = token
          return self.token

在另一个类中,我试图调用静态变量,但它总是打印在第一个类中声明的初始值,即 token = ''

      credentials = Login(Base)
      print(type(credentials.auth_token.__func__))
      print(hasattr(credentials,'token'))
      print(credentials.token)""" 

【问题讨论】:

  • 如果您真的希望tokenLogin 的所有实例中都相同,则将其称为Login.token 而不是self.token。但是,您确定这是您想要的行为吗?
  • @Jean-FrançoisFabre 这不是问题
  • @jonrsharpe:我不知道,我讨厌非常量静态成员
  • @Jean-FrançoisFabre 好欺负你;那么,也许不要对他们施加压力。
  • @jonrsharpe:我的意思是:可变静态数据成员很少是解决方案。

标签: python python-2.7


【解决方案1】:

如果您将 auth_token 设为 @classmethod,它将按照您想要的方式运行

  @classmethod 
  def auth_token(cls, token):
      cls.token = token
      return cls.token

我不确定我是否喜欢这个设计,但那是你的事。

编辑:这是响应 cmets 的此代码的示例:

>>> class Login(object):
...   token = ""
...   @classmethod 
...   def auth_token(cls, token):
...       cls.token = token
...       return cls.token
... 
>>> l = Login()
>>> l2 = Login()
>>> l.token
''
>>> l2.token
''
>>> l.auth_token("foo")
'foo'
>>> l2.token
'foo'
>>> 

【讨论】:

  • 乔恩,我按照上面的方法进行了更改,但我仍然可以在我的班级创建中看到旧值,即第二班。
  • class Create(Login): """Create the virtual Instance or Instances""" def run(self): credentials = Login(Base) print(type(credentials.auth_token.__func__)) print(hasattr(credentials,'token')) print(getattr(credentials,'token')) print(type(credentials.token)) print 'Create virtual instance class!' print 'You supplied the following options:', dumps(self.options, indent=2, sort_keys=True)
  • 上面的代码打印出这个输出, True Create virtual instance class!
  • 我可以看到 type(credentials.token) 为 但是如何打印 token 的值,请你帮忙。
  • @Kalyan 我不确定该代码与您的问题有什么关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多