【问题标题】:how to access the class variable by string in Python?如何在 Python 中通过字符串访问类变量?
【发布时间】:2012-10-29 11:30:18
【问题描述】:

代码是这样的:

class Test:
    a = 1
    def __init__(self):
        self.b=2

当我创建Test 的实例时,我可以像这样访问它的实例变量b(使用字符串“b”):

test = Test()
a_string = "b"
print test.__dict__[a_string]

但它不适用于a,因为self.__dict__ 不包含名为a 的键。那么如果我只有一个字符串a,如何访问a

谢谢!

【问题讨论】:

  • self.__dict__ 不包含名为a 的键的原因是它在self.__class__.__dict__ 中。如果您真的想手动执行操作,您可以阅读属性的搜索顺序并以相同的顺序检查所有内容……但您真的不想手动执行操作。 (您必须处理插槽、属性、经典与新型类、自定义__dict__s、自定义描述符以及各种其他有趣的东西,但与解决您的问题没有直接关系。 )
  • PS,因为这显然是 Python 2.x,所以你可能需要class Test(object),除非你有特定的理由避免使用新式类。即使对于简单的小测试程序,养成习惯也是值得的。 (尤其是对于明确依赖于两种类不同方式的测试程序……)

标签: python class variables


【解决方案1】:

要获取变量,您可以这样做:

getattr(test, a_string)

【讨论】:

    【解决方案2】:

    getattr这种方式做你想做的事:

    test = Test()
    a_string = "b"
    print getattr(test, a_string)
    

    【讨论】:

      【解决方案3】:

      试试这个:

      class Test:    
          a = 1    
          def __init__(self):  
               self.b=2   
      
      test = Test()      
      a_string = "b"   
      print test.__dict__[a_string]   
      print test.__class__.__dict__["a"]
      

      【讨论】:

        【解决方案4】:

        你可以使用:

        getattr(Test, a_string, default_value)

        如果在Test 类上找不到a_string,则使用第三个参数返回一些default_value

        【讨论】:

          【解决方案5】:

          由于变量是类变量,因此可以使用以下代码:-

          class Test:
              a = 1
              def __init__(self):
                  self.b=2
          
          print Test.__dict__["a"]
          

          【讨论】:

            猜你喜欢
            • 2014-11-23
            • 1970-01-01
            • 1970-01-01
            • 2022-01-25
            • 1970-01-01
            • 2011-07-14
            • 1970-01-01
            • 2020-04-29
            相关资源
            最近更新 更多