Python 按名称获取变量

Python 按名称获取变量,python,class,Python,Class,如何使用变量作为“键”,从“self”语法中获取保存的值 一些代码: class Foo: def __init__(self, n1, n2, n3, ...): self.node_1 = n1 self.node_2 = n2 self.node_3 = n3 ... def get_node(n): return self."node_"+n # This is wrong. What s

如何使用变量作为“键”,从“self”语法中获取保存的值

一些代码:

class Foo:
    def __init__(self, n1, n2, n3, ...):
        self.node_1 = n1
        self.node_2 = n2
        self.node_3 = n3

        ...
    def get_node(n):
        return self."node_"+n  # This is wrong. What should I use?
  • 我不能执行switch语句,因为我有21个值

  • 更清楚地说,如果
    n=2
    ,我需要值
    self.node_2
    。因此
    n=3
    self.node\u3
    ,等等

  • 你可以用。将类的对象和属性作为
    string
    传递给access时,您将获得相应属性的值。下面是示例代码:

    class MyClass:
        def __init__(self, n1, n2):
            self.node_1 = n1
            self.node_2 = n2
    
        def get_node(self, n):
            return getattr(self, n)
    
    x = MyClass('value_1', 'value_2')
    
    print x.get_node('node_1')
    # Output: 'value_1'
    
    但是,您还应该更新
    \uuu init\uu()
    方法以使用
    **args
    ,正如您提到的,您有大量的属性列表。与一起使用可动态设置属性。下面是一个例子:

    >>> class MyClass:
    ...     def __init__(self, *args):
    ...         for i, item in enumerate(args):
    ...             setattr(self, 'node_{}'.format(i+1), item)
    ...     def get_node(self, n):
    ...         return getattr(self, n)
    ... 
    >>> x = MyClass(1, 2, 3, 4)
    >>> x.get_node('node_1')
    1
    >>> x = MyClass('a')
    >>> x.get_node('node_1')
    'a'
    

    为什么不创建一个
    self.nodes
    列表呢?虽然您可以通过存储在字符串中的名称访问属性,但节点列表将更有意义。临时解决方案<代码>获取属性函数。“我需要一个动态变量名”的正确解决方案是使用dict(如果名称必须是任意的)或列表(如果需要var1、var2、…varN)。