2016-10-21 2 views
0

파이썬에 패키지 및 모듈을 제공 할 때 새로운 편입니다. 여러 개의 구획에서 스크립트를 자르려고합니다. 가독성과 유지 보수를 향상시킵니다.모듈에서 가져온 함수가이 모듈의 클래스에 액세스 할 수 있습니까?

내 문제는 다음

내가 클래스와이 클래스의 인스턴스를이 모듈 내부의 함수를 정의 모듈을 가지고있다. 모듈 내가 그 기능을 사용하고자하는 메인 스크립트를 가지고 _ _init__.py 파일

__all__ = ["blast"] 

와 함께 패키지 내부에

class Blast(): 
    blabla 

def foo(): 
    blast = Blast() 
    # do some stuff 

이 모듈은을 blast.py. 그래서 작동하지

blast.foo() 

: 나는

from package import blast 

하지만 모듈의 이름 공간을 사용할 필요가 해당 기능을 사용하려면 (pycharm 적어도 내 IDE 나에게 그런 말)와 모듈을 가져 ? 함수는 모듈 내부의 클래스를 볼 것인가?

그리고 더 일반적으로 내 네임 스페이스 내에 패키지의 일부 기능을 가져올 수 있습니까? 나는 그것이이 길을 끝내었지만 인터넷에서 얻은 대답은 정말로 나를 돕지 않는다.

+0

내 대답이 귀하의 질문에 답변 한 경우 – nlsdfnbch

+0

에게 도움이되는지 확인한 후 동의로 표시하십시오. – nlsdfnbch

답변

0

예, 함수 blast.foo()은 클래스 Blast을 알고 있습니다.

모듈을 일부만 가져 오거나 전체를 가져올 때마다 전체 모듈이로드됩니다. 가져 오는 방법은 현재 범위에서 사용할 수있는 클래스와 함수를 결정하는 것입니다. 예를 들어

,이 호출하는 경우 :

from package.blast import foo 

만 기능 foo() 사용할 수,하지만 전체 패키지 읽고로드를. 동일한 스크립트에서 클래스 Blast을 인스턴스화하려고하면이 작업이 수행되지 않습니다.

그런데 __init__.py을 사용자 정의하면 더 쉽게 가져 오기 기능을 사용할 수 있습니다. 귀하의 경우에는, 당신은라면과 같이 편집합니다 :

>>>__init__.py 
from blast.py import Blast, foo 

당신과 같이 기능과 클래스를 모두 가져올 수 있습니다

from package import Blast, foo 

당신이 __all__ 매개 변수가 작동하지 않는 이유는, 그것 때문이다 또 다른 import 문이 필요 - 주로이 : 이것을 호출

from package import * 

당신의 예상대로 __init__.py 작동합니다 현재.

아마도 this post by Mike Grouchy은 더 많은 것을 명확히 할 수 있습니다.

+0

대부분의 것보다 더 명확한 설명은 인터넷 덕택에 찾을 수 있습니다. –

관련 문제