按名称获取变量

Dun*_*yte 2 python class

如何使用变量'key'从'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?
Run Code Online (Sandbox Code Playgroud)
  1. 我不能做一个switch语句,因为我有21个值......

  2. 只是为了让它更加清晰,如果n = 2,我想要价值self.node_2.所以n = 3IS self.node_3

Moi*_*dri 5

你可以用getattr(class_obj, 'property').在传递类的对象和要访问的属性时string,您将获得相应属性的值.以下是示例代码:

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'
Run Code Online (Sandbox Code Playgroud)

但是__init__(),**args如您所述,您还应该更新您的方法以使用大量属性.使用setattr(class_obj, 'property', value)连同enumerate()动态设置属性.以下是该示例:

>>> 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'
Run Code Online (Sandbox Code Playgroud)