このクラスから既に作成されているインスタンスのリストに反復子を返す iterable クラスを作成するタスクがあります。次に例を示します。
x = SomeClass()
y = SomeClass()
for obj in SomeClass:
print obj
>><__main__.SomeClass object at .......> and etc
metaclass と globals() を介して作成しました。それはひどいように見えますが、うまくいきます。そして、よりエレガントでpythonicな方法を見つけたいです。最初はweakrefを介してこれを作成したいのですが、メタクラスから作業クラスからいくつかの変数を取得する方法がわかりません.メタクラスのオブジェクトに参照を保存しようとすると、私のメタクラスへの参照が作成されます.クラスなので、これが私の実装です:
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