2011-01-16 4 views
0

인사말! 간단한 뱀 게임을 만들고 있습니다. 다른 모듈 e.i에서 수업을 확장하고 싶습니다. 나의 메인 게임 루프와는 별도의 스크립트에 메뉴 클래스가 있습니다. 즉, 가져온 스크립트가 주 스크립트에서 이전에 호출 된 pygame init을 사용하도록합니다.가져온 스크립트에서 Pygame 모듈 사용

(내가 파이 게임을 수입하고 pygame.init 않았다 main.py에서

def version(): 
    print pygame.version 

one.py) : 여기

내 문제의 의사 코드를 사용하여 간단한 예이다. 여기에서 나는 또한

import pygame 
import one 

pygame.init() 

one.version() 

그러나, 그것은 나에게 어떤 파이 게임 정의 오류를 제공 main.py

one.py에서 고화질 버전()를 사용하고 싶습니다. 나는 그것이 왜 오류를 줄 이유는 알아 이유는 one.py가 main.py에서 호출되었을 때 main.py에서 선언을 유지하지 못하기 때문이다.

내가 알고 싶은 것은 실제로 위에서 언급 한 방법을 사용하는 것입니다.

감사합니다.

답변

3

모듈 X를 가져 오는 모듈의 가져 오기가 X의 네임 스페이스에 누출되지 않습니다. 좋은 점은 동적 범위 지정 또는 C/C++ 스타일이 필요합니다. #include 모두 거의 유용하지 않으며 종종 그렇습니다. 해로운). 그것은 완전히 분리 된 네임 스페이스입니다. 모듈 (예 : pygame) (예 : one)을 모듈에서 사용하려면 가져옵니다.

+0

나는 그것을 생각했다; 그러나 그것은 효율적입니까? 만약 내가 그 길로 가다 보면 필자는 필요에 따라 각 모듈에 파이 게임을 가져와야 할 것이다. 아마도 호출 될 때 파이 게임을 임포트하는 함수를 가진 별도의 모듈을 만든다면? – user577317

+0

@ user577317 : 예, 효율적입니다. 별도의 모듈을 생성하는 것은 무의미합니다. 왜냐하면 그 모듈을 반입해야하기 때문입니다. –

+1

@ user577317 : 호출자의 네임 스페이스를 조작 할 수 없습니다. (물론 할 수는 있지만, 신뢰할 수없는 해킹이 될 수 있습니다. 상당한 양의 작업이 필요하며 처음에는 나쁜 생각입니다). ** 그냥 가져와 **, 세상에. 이 질문은 이해가없는 최적화가 무의미하고 해로운 이유의 또 다른 예입니다. 이미 가져온 모듈 가져 오기 (현재 실행중인 인터프리터 프로세스에서 일반적으로 하나의 프로그램에 대해서만 사용할 수 있음)는 이미 가져온 모듈. 나는. 비효율적이지 않다. – delnan

1

파이썬의 수입 모델은 다음과 같습니다 당신이 당신의 모듈 d.e.f에 모듈 a.b.c 필요한 경우 추가 import a.b.c (또는 유사) d/e/f.py의 시작. (이것은 자바의 임포트 방식과 비슷합니다.) 따라서 많은 모듈 (예 : a.b.c1, a.b.c2, ...)을 필요로하는 많은 모듈 (예 : d.e.f1, d.e.f2, ...)을 가지고 있다면, 각 모듈이 모듈 소스 파일에 동일한 import 문을 여러 개 생성합니다. 더 컴팩트 한 임포트 모델 (동일한 모듈을 한 번만 임포트해야하는 곳)이 더 좋을 것 같지만 컴팩트 임포트 모델은 전역 네임 스페이스를 사용하고 의존성 추적을 만들 것입니다. 누가이 코드를 필요로 하는가?,이 코드는 어디에서 왔는가?) 훨씬 더 어렵습니다. 따라서 필요하지 않다고 생각되는 수입 라인을 작성할 때마다 유지 보수가 가능한 코드에 대해 지불하는 (작은) 가격임을 기억하십시오.

+0

음 ... 흥미 롭습니다. 조언 주셔서 감사합니다, 나는 그것을 명심할 것입니다. – user577317