2012-01-26 3 views
2

디버깅하는 동안 특정 클래스의 인스턴스를보고 액세스하는 방법은 python \ pydev에 있습니까?
예를 들어, SomeClass과 여러 모듈을 하나의 파이썬 인터프리터 스크립트에 정의하면이 클래스가 인스턴스화됩니다. 인터프리터에 얼마나 많은 인스턴스가 있는지 확인하고 코드를 강요하지 않고 중앙 속성으로 속성에 액세스 할 수있는 방법이 있습니까? (클래스가 정의 된 모듈과 같은) 단일 위치에서 참조를 보유 할 수 있습니까?디버깅하는 동안 클래스의 모든 인스턴스에 액세스

class Foo(object): 
    pass 

f2 = Foo() 

는 다음과 같이 스크립트 script.pyFoo의 모든 인스턴스를 셀 수 있습니다 : 당신이 모듈 othermod.pyFoo 클래스를 정의하는 경우 예를 들어

: 당신은 gc.get_objects()를 사용하여 이러한 모든 개체를 찾을 수

답변

6

:

import gc 
import othermod 

f = othermod.Foo() 

objs = gc.get_objects() 
# print(len(objs)) 
# 3519 

print(len([obj for obj in objs if isinstance(obj,othermod.Foo)])) 
# 2 

경고 : gc.get_objects 않습니다 (int 또는 str과 같은) 원자 유형의 인스턴스를 추적 할 수 있지만 추적하려는 객체의 종류가 아닌 것처럼 들립니다.

4

또 다른 옵션은 objgraph 모듈을 사용하는 것입니다

In [1]: class A(object): pass 

In [2]: class B: pass 

In [3]: test1 = [A() for i in range(3)] 

In [4]: test2 = [A() for i in range(3)] 

In [5]: test3 = [B() for i in range(5)] 

In [6]: import objgraph 

In [7]: objgraph.by_type('A') 
Out[7]: 
[<__main__.A at 0x2ccc130>, 
<__main__.A at 0x2ccc150>, 
<__main__.A at 0x2ccc170>, 
<__main__.A at 0x2cbb790>, 
<__main__.A at 0x2cbb1b0>, 
<__main__.A at 0x2cbb7f0>] 

을하지만 이전 스타일의 클래스에 대한 작동하지 않습니다

In [8]: objgraph.by_type('B') 
Out[8]: [] 

objgraphunutbu 대답처럼, 가비지 컬렉터에서 정보를 사용합니다.

관련 문제