我有创建一个可迭代类的任务,该类在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