2012-10-13 3 views
1

런타임시 클래스의 인스턴스를 파이썬에서 찾는 방법Python 런타임에서 클래스의 인스턴스를 찾는 방법

예 :

class Foo(): 
    pass 

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

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

런타임에 Bar 클래스의 인스턴스가 몇 개 있고 이름이 있는지 어떻게 알 수 있습니까?

또한 런타임시에이를 사용하여 사용자 지정 사전에 포함 시키거나 변수 (vars() 사용)의 보편적 인 dict에서 가져 오는 것이 더 나은 솔루션이 될 것입니다.

감사

답변

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 

그것 훨씬 더 당신이 할당 된 변수 이름을 얻을 복잡한은 ...

+0

덕분에, 내가 찾던이 .. –

3

얼마나 많은 따라서 수행 할 수 있습니다

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

당신은 또한 원하는 경우 그 이름을 사용하면 별도의 변수 대신 사전을 사용하는 것이 더 나을 수 있습니다.

편집 : 나는 너무 이름을 얻기 위해 해킹 생각 :

for obj_name in dir(): 
    if isinstance(eval(obj_name), Bar): 
     print obj_name 
관련 문제