我有创建一个可迭代类的任务,该类在iter上返回已经从此类创建的实例列表上的迭代器,例如:
x = SomeClass()
y = SomeClass()
for obj in SomeClass:
    print obj
>><__main__.SomeClass object at .......> and etc
我通过元类和 globals() 实现了它。它看起来很糟糕,但它确实有效。我想找到一种更优雅和pythonic的方式;起初我想通过一个弱引用来做到这一点,但我不明白如何从我的元类中从工作类中获取一些变量,当我尝试将引用存储在我的元类中的对象上时,它正在为我的对象创建一个引用类,所以这是我的实现:
class ObjectsInMemory(object):
    class __metaclass__(type):
       def __init__(self, *args, **kwargs):
            self.name = args[0]
       def __iter__(self):
            glob = globals().copy()
            cls_inst = []
            for _, v in glob.iteritems():
                try:
                    if self.name in v.__repr__():
                        cls_inst.append(v)
                except TypeError:
                    pass
            yield cls_inst