我有一个班级
class MyClass():
def __init__(self):
self.a = 7
self.b = 2
@property
def aAndB(self):
return self.a + self.b
我想要一个迭代所有属性的函数,只返回具有特定属性的类实例。
我的目标是这样的功能:
def findInstances(listOfInstances, instanceVariable, instanceValue):
#return all instances in listOfInstances where instanceVariable==instanceValue
使用instance.__dict__
仅向我a
和b
,但不是 aAndB
。我希望有一个所有属性/方法的字典及其值的循环,所以我可以搜索某个属性(或用@property
修饰的方法)具有特定值的实例。
目前,正在调用此函数
findInstances(someListOfInstances, 'aAndB', '23')
让Python抱怨aAndB
不在instance.__dict__.
也许你们所有人都是对的,答案就在那里,但我仍然没有得到它。上述问题中的所有答案都会得到列表,而不是字典。我想要所有属性(包括带有@property
装饰器的方法)及其值。有没有办法迭代dir(myClass)
中的键值? dir
命令仅包含属性的名称,而不包含其值。
我需要像
这样的东西for a in dir(myClass):
print a, myClass.(a) # get the value for an attribute stored in a variable
更清楚:以下内容完全符合我的要求,但可能有更好的方法,我不知道。
for a in dir(myClass):
print a, eval("myClass.{}".format(a))
答案 0 :(得分:2)
实际上这是一种非常简单的方法,使用getattr
代替eval
:
myClass = MyClass()
for a in dir(myClass):
if(a[:2] != "__"): #don't print double underscore methods
print a, getattr(myClass, a)
输出:
a 7
aAndB 9
b 2
这具有非常大的优势,即不需要将实例名称中的硬编码到字符串中,如使用eval("myClass.{}".format(a))
所需