我可能正在接近这个错误,但我会感激被理顺.
我希望能够同时使用类的某些属性的值和名称
样品:
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)
我想要的是:
Run Code Online (Sandbox Code Playgroud)a Alpha b Beta c Gamma
我怎么能得到它?
编辑:有些混乱,因为我的例子显示我打印了所有的值.相反,我想要这个:
Run Code Online (Sandbox Code Playgroud)a Alpha c Gamma
我的打印方法列表中只有'a'和'c'.
您的类和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)你最接近的是:
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)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |