2012-01-17 22 views
22

파일에 .py 개의 파일이있는 디렉토리가 있습니다. 각 파일은 몇 개의 클래스를 정의합니다. 나는 또한 빈 __init__.py 디렉토리에 있습니다. 예를 들어모듈에는 속성이 없습니다.

: 나는 모든 파일에 정의 된 클래스를 mymodule을 가져 액세스하려고

myproject 
    __init__.py 
    mymodule 
     __init__.py 
     api.py 
     models.py 
     views.py 

:

from myproject import mymodule 

print mymodule.api.MyClass 

그것은 나에게 mymodule 더 속성 api이없는 없다는 오류를 제공합니다. 왜? 그리고 왜 다른 파일이 아닌 파일 중 하나 (models.py)에 액세스 할 수 있습니까?

In [2]: dir(banners) 
Out[2]: 
['__builtins__', 
'__doc__', 
'__file__', 
'__name__', 
'__package__', 
'__path__', 
'models'] 

답변

28

서브 모듈이 자동으로 가져 오기되지 않는 문제가 있습니다. 예상대로

import myproject.mymodule.api 

그런 다음이 작동합니다 : 당신이 정말 당신이 myproject/mymodule/__init__.py이를 넣을 수 있습니다 myproject.mymodule을 가져올 때 사용할 수있는 api 주장하는 경우

import myproject.mymodule.api 
print myproject.mymodule.api.MyClass 

: 당신은 명시 적으로 api 모듈을 가져와야합니다

from myproject import mymodule 

print mymodule.api.MyClass 
1

모듈은 이와 같이 작동하지 않습니다.

from myproject.mymodule import api 
print api.MyClass 
+0

내가 할 수 있음을 알고 있습니다. 점으로 된 이름을 사용하는 것이 가능합니까? – akonsu

+2

@akonsu이면, 간단히'import myproject.mymodule.api'를 실행하고'myproject.mymodule.api.MyClass'를 통해 접근하십시오. –

+0

글쎄, 이건 일반적으로 언어에 관한 질문이라고 생각합니다. 어떻게 코드를 작동시킬 수 있는지에 관한 것이 아닙니다. 이것이 달성 될 수 있는지 궁금합니다. 'mymodule.api ...'를 통해 내 수업에 액세스하도록 할 수 있습니까? – akonsu

2

myproject 디렉토리에도 __init__.py이 필요합니다. 따라서 모듈 구조는 다음과 같아야합니다 :

myproject 
    __init__.py 
    mymodule 
     __init__.py 
     api.py 
     models.py 
     views.py 
+1

네, 고맙습니다. – akonsu

관련 문제