magic method는 객체에 대하여 객체 생성, 연산, 인덱스 접근 등 파이썬 내부의 문법적 동작을 수행할 때 실행하도록 약속된 특수한 메소드이다.
__init__(), __getitem__()과 같이 언더바(_)로 둘러쌓여져 있는 특수한 형태를 가지고 있어서 사용자 지정 메소드와 겹치지 않도록 한다.
객체를 생성할 때에는 __init__() 메소드를, len 함수를 사용할 때에는 __len__() 메소드를, + 연산자를 사용할 때에는 __add__() 메소드를 호출하는 등 파이썬의 어떤 문법을 사용했는지에 따라 어떤 magic 메소드를 불러올지 파이썬 인터프리터 내부적으로 약속되어 있다.
Magic method가 객체에 대한 문법적 동작을 수행할 때 실행되도록 약속된 특수한 메소드라면, special variable은 파이썬 모듈 실행 환경에 대한 정보를 담고 있는 변수이다.
__name__에는 모듈이 python에 의해 직접 실행되었다면 __main__이, 다른 모듈에 import되어 사용되었다면 모듈의 이름이 저장된다. __file__에는 모듈의 실제 위치가 저장되어 있고, __package__에는 이 모듈이 속해 있는 패키지의 이름이 저장되어 있다.