2013-04-08 1 views
2

주어진 다음의 두 평 파일 :isinstance 행동

aclass.py

class A(object): 
    pass 

main.py

def importer(klass): 
    """ 
    Used to import classes from there python qalname 
    """ 
    import_ = lambda m, k: getattr(__import__(m, fromlist=k), k) 
    klass = klass.split('.') 
    module = '.'.join(klass[:-1]) 
    klass = klass[-1] 
    return import_(module, klass) 

from aclass import A 

import_A = importer('aclass.A') 
print isinstance(A(), import_A) # Expected to be true 
print isinstance(import_A(), A) # Expected to be true 

이 단계에서, 다 잘 (내 프로그램을 작동 True\nTrue) 그러나 재로드를 적용하기 위해 importer 메서드를 수정하면 다음과 같이됩니다.

이 라인 :

import_ = lambda m, k: getattr(__import__(m, fromlist=k), k) 

로 대체된다

내 프로그램은

False 
False 

을 반환 그리고 나는이 문제를 이해하지 않습니다.

답변

4

모듈을 다시로드한다는 것은 해당 콘텐츠를 다시 실행한다는 의미이며이 경우 class A(object): pass입니다. 그래서 또 다른 클래스를 만듭니다. 베어 reload()은 일반적으로 좋은 생각이 이유를 설명하기에 충분합니다

class A(object): 
    pass 
a = A() 
class A(object):   # a different class 
    pass 
print isinstance(a, A) # False 

:이 같은 행동입니다. 다른 사람들이 더 정교한 재 로딩 절차를 구현하는 프레임 워크를 가리킬 수 있다고 확신합니다. 새 클래스와 동일한 것으로 간주 할 수 있도록 이전 클래스를 패치합니다.

+0

'다른 사람이 프레임 워크를 가리킬 수 있습니다', 다른 사람들이 그런 구현을 가르쳐 주길 바랍니다! – ohe

+1

자세한 내용은 다음을 참조하십시오. http://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module –