goal: "import foo
and obtain a list of the Foo objects instantiated by..."
당신은 전혀 내성 할 필요가 없습니다. 이 클래스가 클래스라고 상상해보십시오.
class Registered(object):
_all = set()
def __init__(self):
self.__class__._all.add(self)
데모; 객체의 무리를 인스턴스화하고 그들에게 참조 : 당신이 dir
을 사용하고 있기 때문에
>>> Registered()
>>> Registered()
>>> Registered()
>>> Registered._all
{<__main__.Registered object at 0xcd3210>, <__main__.Registered object at 0xcd3150>, <__main__.Registered object at 0xcd31d0>}
, 내가 제대로 이해한다면, 당신은 현재 모듈의 전역 변수에있는 모든 개체를 찾기 위해 노력하고 있습니다. 그러나 실제로 현재 모듈의 모든 객체를 가져 오지 않으며 변수에 바인드 된 객체 만 가져옵니다. 즉 당신이 정말로 원하는 있다면, 즉, 당신은 객체가 inspect.currentframe().f_back.f_globals
또는 무언가를 통해 정의 된 모듈을 추적 위를 수정할 수 없습니다 당신이 정말로 원하는 있다면 당신은 {var for name,var in globals() if isinstance(var,Foo)}
을 할 수 있지만, 이것은 당신을 방지 할 수 foo.py
또는 다른 모듈에 정의 된 팩토리 함수를 사용합니다.
실제로 모듈에서 생성 된 모든 인스턴스를 얻으려는 경우 심각한 코딩 문제가 있습니다. 그 모듈에 팩토리 함수 래퍼 (factory function wrapper)를 작성하는 것을 고려해보십시오. 초기화 함수를 따라 가면서 초기화 된 객체를 추적하면서 결과를 반환하는 것을 제외하고는 아무것도하지 않습니다.
"이 클래스의 모든 인스턴스화 된 인스턴스를 얻는 방법"의 이름을 바꾸는 것이 좋습니다. – ninjagecko