2012-07-01 3 views
4

저는 Google 애플리케이션 엔진을 사용하기 시작했으며, 우수 사례 및 코드 구성을 둘러 보았습니다. 내 문제의 대부분은 __init__.py의 혼란에 있습니다. 나는 단순히/페이지 및/페이지/하위의 모든 가리키는 파일로 main.py 사용하는 것을 시도하고있다 __init__.py를 사용하여 코드를 구성하는 방법은 무엇입니까?

/website 
    main.py 
    /pages 
    __init__.py #1 
    blog.py 
    hello2.py 
    hello.py 
    /sub 
     __init__.py #2 
     base.py 

처럼

내 현재 테스트 구조를 보인다. 대부분의/pages 모듈은 거의 동일한 가져 오기 (예 : urllib 가져 오기)를 공유하므로 페이지 모듈의 모든 항목을 모든 개별 모듈에 추가하지 않고 가져 오는 것을 정의하는 방법이 있습니까?

현재 __init__.py # 1에 나는 BaseHandler (base.py에서 함수)를 말한다 blog.py

from sub.base import * 

그러나 내 모듈 정의되지 있습니다. 내 최종 목표는 ... 같은 것을 가지고

main.py 
from pages import * 
#be able to call any function in /pages without having to do blog.func1() or hello.func2() 
#rather just func1() and func2() 

그리고 __init__.py/pages에서 모듈에 대한 일반적인 수입을 공유 할 수 있습니다. 그래서 그들은 urllib와 base.py의 모든 기능을 공유합니다. 이 게시물을 읽는 시간을 내 주셔서 감사합니다, 나는 당신의 통찰력을 기대합니다.

+0

'__init__'로 가져온 항목은 동일한 패키지의 모듈에서도 자동으로 사용할 수 없습니다. blog.py와 같이 필요한 경우 BaseHandler를 명시 적으로 가져와야합니다. –

답변

3

__init__.py은 패키지의 다른 모듈에 대한 이니셜 라이저입니다. 그렇지 않습니다. 그것은 pages을 패키지로 만들고 (파일과 하위 디렉토리를 모듈로 허용 함) 프로그램이 import pages을 호출 할 때 일반 모듈처럼 실행됩니다. 대신 pages.py이라는 이름으로 상상해보십시오.

그래서 당신이 정말로 (sub의 네임 스페이스에 base 모든 것을 가져올 것이다) from base import *를 포함 할 수 있습니다 # 2 init을, 같은 공간에 모든 것을 덤프하려는 경우와 blog.pyfrom sub import *를 포함 할 수 있습니다. 알았다?

+0

__init__.py의 목적을 명확히 해 주셔서 감사합니다. 많은 도움이되었으므로 이제는 원하는 기능을 얻고 있습니다. 나는 주위에 내 머리를 감싸는 데 더 많은 것을 가지고 놀아야한다. 그러나 당신은 나를 올바른 방향으로 놓았다. – Miles

관련 문제