2009-07-03 5 views
2

파이썬이 모듈을 다시로드하는 방법을 배우려하고 있지만로드 블록을 쳤습니다. 의 내가 있다고 가정 해 봅시다 :다른 파일로 가져온 Python 모듈을 다시로드하는 방법은 무엇입니까?

dir1\file1.py을 :

from dir2.file2 import ClassOne 
myObject = ClassOne() 

dir1\dir2\file2.py을 :

class ClassOne(): 
    def reload_module(): 
     reload(file2) 

다시로드 호출이 모듈 "파일 2"를 찾기 위해 실패합니다.

제 질문은 모든 것을 한 파일에 보관하지 않고도 어떻게 올바르게 수행 할 수 있습니까?

관련 질문 : 리로드가 작동하면 myObject가 새 코드를 사용합니까?

는이 당신이 파일 2의 이전 버전에서 개최 된 클래스로부터 인스턴스화 한 객체의 유형을 변경하지 자체 것이다,

+3

다시로드하는 데는 거의 사용되지 않습니다. 너 뭐하려고? –

+0

S.Lott이 맞습니다. 예제 코드가 일반적으로 원하지 않는 것처럼 보이기 때문에 실제 사례가 무엇인지 조금 더 설명해야합니다. – balpha

+0

기본적으로 내가하고 싶은 것은 시스템이 실행되는 동안 사용자가 변경할 수있는 편집 창에서 코드를 실행하는 객체를 갖는 것입니다. 객체는 호출되는 일반적인 "step()"함수를 가지며, 여기서 사용자는 코드를 변경해야합니다. 이렇게하면 프로그램이 실행될 때 개체의 동작이 변경됩니다. – user129975

답변

3
def reload_module(): 
     import file2 
     reload(file2) 

그러나 감사합니다. 파이썬 쿡북 2 판에는 그러한 업적을 달성하는 방법에 대한 조리법이 있습니다. 코드와 토론 모두에서 너무 길고 복잡하여 여기에서 재현 할 수 없습니다 (Google 책 검색에서 읽을 수 있거나 원본 "원시" 버전 [적어도 우리가 한 모든 향상 전에] 적어도 activestate 요리 책 온라인 사이트에 있어야합니다.

+0

reload는 모듈 객체를 인수로 필요로합니다. ; import는 해당 모듈 객체를 현재 명명 범위에 바인딩합니다. 본질적으로이 코드를 포함하는 모듈 file2는 요청시 (소스가 변경된 경우) 이전 버전의 클래스로 인스턴스화 된 객체로 문제의 그물을 제거한 후 요청에 따라 "메모리에서 자동으로 새로 고침"할 수 있습니다. –

+0

죄송합니다. 제 질문이 삭제되었습니다 (분명히 된 후). 필자는 본질적으로 두 번 연속으로 가져 오는이 지점이 무엇인지 물었다. – balpha

+0

감사합니다. Alex. 나는 이것을 시도하고 어떤 오류도 던지지 않는 한 그것이 효과가있다. 나는 아직도 그 객체들을 어떻게 든 재 장전 할 필요가있다. 당신이 그 책을 썼다는 것을 알았습니다. 시원한...! – user129975

관련 문제