循环遍历类的实例以查找等于关键字的属性

时间:2013-06-22 16:40:25

标签: python python-3.x

好的,所以我要做的是创建一个函数,它将根据类的所有对象共享的特定属性的值来查找对象实例。本质上,我希望Python搜索类的每个实例的特定属性,并检查它与另一个值,如果它找到匹配来做一些东西。在伪代码中:

for each instance of Class:
    if search_keyword is in instance.attribute:
        do some stuff
        found = True

if found is True:
    tell_user("Found instance!")

如果我的询问性质需要更多细节,那么:

我正在做的主要是将对象用作扩展字典。我有多个属性附加到对象,我想搜索它们。我基本上将它用作存储容器,我需要搜索它。

如果有更好的方法存储除对象以外的所述信息,请分享。

我基本上将它用作具有多个键的字典。

1 个答案:

答案 0 :(得分:1)

你可以通过一个class属性来轻松地做到这一点,该属性是所创建的该类的所有实例的列表,并且让该类的每个实例的__init__将实例添加到列表中。

class Foo(object):
    list_of_all_foos = []

    def __init__(self):
        Foo.list_of_all_foos.append(self)

然后搜索您创建的所有Foo个实例:

for foo_instance in Foo.list_of_all_foos:
    if search_keyword is in foo_instance.attribute:
        do some stuff
        found = True

if found is True:
    tell_user("Found instance!")

或者,使用类方法执行此操作,这可能更具惯用性:

class Foo(object):
    list_of_all_foos = []

    @classmethod
    def create_foo_and_add_to_list(cls, *args, **kwargs):
        new_foo = cls(*args, **kwargs)
        Foo.list_of_all_foos.append(new_foo)
        return new_foo