python에서 __all__의 역할은 뭔가요?

파이썬 공부하고 있는데 __init__.py 파일 안에 __all__ <- 이게 자꾸 보며요 이건 뭐하는데 쓰나요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    __all__은 string을 element로 가지는 list입니다. 이 string은 from <module> import *에서 export 될 symbol을 의미하지요.

    예를 들어, 다음의 코드 foo.py는 symbol bar, baz를 export합니다.

    #foo.py
    __all__ = ['bar', 'baz'] # import *에서 bar, baz를 export할 것을 명시
    
    waz = 5
    bar = 10
    def baz(): return 'baz'
    

    이제 temp.pyfoo 모듈을 import하면

    #temp.py
    from foo import * #bar, baz가 import 됨
    
    print bar #성공
    print baz #성공
    print waz # "waz"는 foo.py의 __all__에서 명시하지 않았기 때문에 exception이 발생
    

    단, __all__을 명시하지 않고 import *한 경우는 모든 symbol(언더바_로 시작하는 symbol은 제외)이 import되므로 foo.py__all__부분을 지운다면 print waz는 문제없이 실행됩니다.

    이런 이유로 __init__파일 안에서 __all__을 설정합니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.