1

Pythonで実行時にクラスのインスタンスを見つける方法

例えば。

class Foo():
    pass

class Bar(Foo):
    def __init__(self, a):
            print a

inst_b1 = Bar(3)
inst_b2 = Bar('Hello World!!!')

クラス Bar のインスタンスがいくつ存在し、実行時に名前があるかを調べるにはどうすればよいですか?

また、実行時にそれらを使用したいので、それらをカスタムdictに入れるか、変数のユニバーサルdictから(vars()を使用して)取得するより良い解決策は何でしょうか。

ありがとう

4

2 に答える 2

3
class Bar(Foo):
    instances = []
    def __init__(self, a):
            print a
            Bar.instances.append(self)

inst_b1 = Bar(3)
inst_b2 = Bar('Hello World!!!')
print len(Bar.instances)
print Bar.instances

割り当てた変数名を取得するのははるかに複雑です...

于 2012-10-13T05:58:25.360 に答える
3

このようにいくつできるか:

import gc
n_Bars = sum(1 for obj in gc.get_objects() if isinstance(obj,Bar))

それらの名前も必要な場合は、個別の変数の代わりに dict を使用する方がよい場合があります。

編集: 名前も取得するためのハックを考えました:

for obj_name in dir():
    if isinstance(eval(obj_name), Bar):
        print obj_name
于 2012-10-13T06:08:10.270 に答える