개발

[python] __all__ 을 이용해 전체 임포트 막기

kwony 2024. 5. 8. 10:27

메타클래스 __all__ 을 활용하면 패키지 전체 임포트시 특정 클래스나 메소드만 임포트 되도록 제한할 수 있다.

 

transporation.py 에서 Bus, Taxi, Subway 클래스를 선언하고 __all__ 에는 Bus와 Taxi 만 추가했다

# transporation.py
class Bus:
    pass

class Taxi:
    pass

class Subway:
    pass

__all__ = ["Bus", "Taxi"]

 

main.py 에서 transporation.py 파일 내부 클래스를 전체 임포트하고 사용하면

from transporation import *

sb = Subway()

 

Subway 를 찾을 수 없다고 나온다.

➜  clean-python python3 main.py
Traceback (most recent call last):
  File "/Users/user/study/python/clean-python/main.py", line 3, in <module>
    sb = Subway()
         ^^^^^^
NameError: name 'Subway' is not defined

 

Subway 를 사용하려면 전체 임포트가 아니라 직접 임포트를 해야한다

from transporation import Subway

sb = Subway()

 

접근 제한을 걸어줄 수 있다는 측면에서 유용할 듯 하다.