2013-09-01 2 views
7

numpy 작업과 같은 라이브러리에 관한 질문이있었습니다. numpy를 가져 오면 numpy.array, numpy.sqrt 등의 클래스, 함수 및 상수에 내장 된 호스트에 액세스 할 수 있습니다.서브 모듈과 함수가있는 파이썬 모듈

하지만 numpy 내에는 numpy.testing과 같은 추가 하위 모듈이 있습니다.

어떻게 처리하나요? 제한된 경험으로 서브 모듈이있는 모듈은 .py 파일이있는 폴더이지만 기능/클래스가있는 모듈은 실제 파이썬 파일입니다. 함수/클래스도 가진 모듈 "폴더"를 만드는 방법은 무엇입니까?

답변

17

.py 개의 파일과 __init__.py의 폴더를 package이라고합니다. 클래스와 함수를 포함하는 파일 중 하나는 module입니다. 폴더 중첩은 서브 패키지를 줄 수 있습니다.

mypackage 
    __init__.py 
    module_a.py 
    module_b.py 
     mysubpackage 
      __init__.py 
      module_c.py 
      module_d.py 

내가 mypackage.module_a 또는 mypackage.mysubpacakge.module_c 등등 가져올 수 :

그래서 예를 들어 나는 다음과 같은 구조를 가지고있는 경우.

__init__.py에 코드를 삽입하여 mypackage (언급 한 numpy 함수와 같은 기능)을 추가 할 수도 있습니다. 이것은 일반적으로 추악한 것으로 간주되지만.

numpy's __init__.py에서 많은 코드를 볼 수 있습니다. 많은 경우 이러한 최상위 클래스와 기능을 정의하고 있습니다. __init__.py 코드는 패키지가로드 될 때 제일 먼저 실행됩니다.

+0

그러면 numpy 나 scipy 같은 라이브러리를 가져올 수 있으며 클래스/함수 (예 : 모듈)와 다른 모듈 (예 : 패키지)을 모두 포함 할 수 있습니다. 그래서 numpy.array (클래스) 또는 numpy.testing.assert (모듈 가져 오기)를 할 수 있습니다. – ImpGuard

+0

나는 방금 대답했다, 그것은 모두'__init __. py'에있다. 인터프리터에 의해로드 될 때 거기에있는 모든 함수는 패키지의 최상위 클래스 멤버가됩니다. –

+0

아, 그게 내가 궁금해 한거야. 나는 그것이 많은 잡다한 추악한 것으로 간주 될 것이라고 생각했다. 논리가 들어간다. 나는 모든 것이 따로 따로 코딩되어 있고 어떻게 든 __init__.py에 모두 결합 된 것으로 추정한다. 이 같은 것을 사용하는 것은 매우 유용하지만 한 파일에 많은 코드를 덤핑하지 않고 복제하는 방법을 모르겠습니다. – ImpGuard

관련 문제