处理属性的名称和值

Ski*_*man 3 python attributes

我可能正在接近这个错误,但我会感激被理顺.

我希望能够同时使用类的某些属性的值和名称

样品:

class DoStuff(object):
    def __init__(self):
        self.a="Alpha"
        self.b="Beta"
        self.c="Gamma"
    def printStuff(self):
        for thing in [self.a, self.b, self.c]:
            print NAMEOFTHING, thing
Run Code Online (Sandbox Code Playgroud)

我想要的是:

a Alpha
b Beta
c Gamma
Run Code Online (Sandbox Code Playgroud)

我怎么能得到它?

编辑:有些混乱,因为我的例子显示我打印了所有的值.相反,我想要这个:

a Alpha
c Gamma
Run Code Online (Sandbox Code Playgroud)

我的打印方法列表中只有'a'和'c'.

And*_*ark 8

您的类和for循环的设置方式,没有什么可以代替NAMEOFTHING获取这些变量的名称.以下是有关如何修改方法的一些备选方案:

  • 使用字典而不是单个属性,然后在for循环中提供键列表:

    class DoStuff(object):
        def __init__(self):
            self.names = {"a": "Alpha",
                          "b": "Beta",
                          "c": "Gamma"}
        def printStuff(self):
            for name in ['a', 'b', 'c']:
                print name, self.names[name]
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用列表中的属性名称,然后使用getattr():

    class DoStuff(object):
        def __init__(self):
            self.a="Alpha"
            self.b="Beta"
            self.c="Gamma"
        def printStuff(self):
            for name in ['a', 'b', 'c']:
                print name, getattr(self, name)
    
    Run Code Online (Sandbox Code Playgroud)


Jon*_*nts 5

你最接近的是:

for thing in ['a', 'b', 'c']:
    print thing, getattr(self, thing)
Run Code Online (Sandbox Code Playgroud)

变量可以有多个名称,并且不知道自己的名称,因此如果您知道它是'a',那么您可以使用它getattr来解析查找.

另一个选择(尽管与上面没有太大的不同)

to_get = ['a', 'b', 'c']
from operator import attrgetter
blah = zip(to_get, attrgetter(*to_get)(self))
Run Code Online (Sandbox Code Playgroud)