__getattr__ 의미
분야
프로그래밍/소프트웨어 개발
대상자
Python 개발자, 객체 지향 프로그래밍에 관심 있는 개발자
난이도: 중급~고급
핵심 요약
__getattr__
은 객체의 속성이 존재하지 않을 때 호출되는 특별 메서드로, 동적 속성 처리에 사용됩니다.__getattr__
은name
매개변수를 받아 존재하지 않는 속성 이름을 전달받고, 기본값 또는 계산된 값을 반환해야 합니다.__getattr__
은 Python 3.7 이상에서 패키지 수준(__init__.py
)에서도 사용 가능하며, 동적 모듈 접근을 가능하게 합니다.__getattr__
은 유연한 객체 설계와 동적 속성 관리에 유용하며, 예외 처리와 기본값 제공이 가능합니다.
섹션별 세부 요약
__getattr__
의 기본 개념
- 객체의 속성이 존재하지 않을 때 호출되는 특별 메서드로, 동적 속성 처리에 사용됩니다.
name
매개변수를 통해 접근하려는 속성 이름을 전달받고, 해당 값을 반환해야 합니다.__init__.py
파일에서 정의하면 패키지 수준에서 동적 속성 접근을 처리할 수 있습니다.- Python 3.7 이상에서 패키지 수준에서
__getattr__
를 사용할 수 있습니다.
- 동적 속성 처리 예시
DynamicAttributes
클래스에서__getattr__
을 정의하여, 존재하지 않는 속성에 대해 기본값을 반환합니다.- 예:
obj.non_existing_attribute
접근 시 "default value"를 반환합니다. __getattr__
은 존재하는 속성 접근 시 호출되지 않습니다.- 반환값은 문자열, 숫자, 객체 등 다양한 유형을 반환할 수 있습니다.
- 패키지 수준의
__getattr__
활용
mypackage/__init__.py
에서__getattr__
정의하여, 특정 속성에 대해 동적 값을 반환합니다.- 예:
mypackage.special_attribute
접근 시 "This is a special attribute"를 반환합니다. special_attribute
가 아닌 속성 접근 시AttributeError
를 발생시킵니다.- 패키지 유연성 향상과 사용자 접근 제어에 유용합니다.
- 기술적 고려사항
__getattr__
은__getattribute__
와 달리, 속성이 존재하지 않을 때만 호출됩니다.__getattr__
은__getattribute__
보다 덜 성능이 좋으므로, 성능 최적화 시 주의 필요.__getattr__
은 모듈/패키지 수준에서 동적 속성 처리에 적합하며,__init__.py
에서 활용 가능.
결론
__getattr__
은 Python 객체에서 존재하지 않는 속성에 대한 동적 처리를 가능하게 하는 메서드입니다.__getattr__
을 사용하면 동적 속성 생성, 기본값 제공, 특정 속성 접근 제어가 가능합니다.- Python 3.7 이상에서 패키지 수준(
__init__.py
)에서도 활용 가능하며, 유연한 객체 설계에 유용합니다. - 실무에서는
__getattr__
을 사용하여 예외 처리와 동적 기능 확장성을 고려한 설계가 권장됩니다.