__getattr__ 2

[Python - Error] NameError: ... / AttributeError: ... / __getattr__ raise NameError(attr) - 발생 원인 및 체계적인 디버깅 방법

요약 - __getattr__ 매서드는 클래스로부터 생성된 인스턴스가 attribute(매서드, 함수, 변수 등)를 찾을 수 없을 경우에 호출됩니다. - NameError 역시 요청한 attribute가 존재하지 않는 경우에 발생합니다. - 따라서, 호출하고자 하는 attribute를 아래 표와 같이 살펴봅시다. - 코드 구조나 완결성과 같이 확인하는데 오래걸리고 복잡한 것 부터 의심하지 말고, 아래 표의 우선순위가 높은 것 부터 (빠르게, 확인하는데 리소스가 적게 드는 것부터) 순서대로 확인해 봅시다. 우선 순위 확인 사항 예시 원했던 것 에러 발생 1 오타 여부 np.zeros(5) np.zoros(5) 2 대소문자 구분 np.zeros(5) np.Zeros(5) 3 library의 적절한 impor..

Python 2022.04.13

[Python - Tip] __getattr__ vs. __getattribute__ : 차이 및 활용 예시 (feat. __init__)

요약 - 클래스의 __init__은 훨씬 익숙할 테니 이와 비교해서 설명을 드리면... - __init__ 은 클래스로 부터 인스턴스를 생성할 때, "자동적으로" 실행이 되는 매소드라고 볼 수 있습니다. - __getattr__ 이나, getattribute__ 도 __init__ 과 유사하게 특정 시점에 실행되는 매소드 역할을 하는데, 각각 실행되는 때가 다르다고 보면 되겠습니다. - 프로그램의 특정 동작에서 정보를 가로채서 원하는 다른 동작을 하기 때문에 Hooking (갈고리, 낚시바늘) 이라고 합니다. - 그럼 __getattr__ 이나, getattribute__ 은 언제 실행될까요? 다음과 같이 정리할 수 있겠습니다. 매소드 실행 시점 __init__ 맨 처음 인스턴스를 생성할 때 __geta..

Python 2022.04.13