Python Property & Descriptor: Zero to Expert
Zerotoexpert
1. 인스턴스 속성 및 프로퍼티
- 인스턴스 속성은 각 클래스 인스턴스에 고유하며, 일반적으로 init 메서드에서 정의됩니다. 이 속성들은 직접 접근하거나 getattr를 통해 접근할 수 있습니다.
- 파이썬의 property 함수는 게터, 세터 및 딜리터 메서드를 정의하여 속성 접근을 사용자 정의할 수 있게 하며, 접근 패턴을 변경하지 않고 추가적인 로직을 가능하게 합니다.
2. 디스크립터 프로토콜
- 디스크립터는 get, set, delete와 같은 메서드를 구현하여 다른 객체의 속성 접근을 제어합니다. 이는 여러 클래스와 변수에 걸쳐 재사용할 수 있어 속성 동작을 관리하는 확장 가능한 솔루션을 제공합니다.
- 디스크립터는 인스턴스 간에 공유되는 클래스 변수이며, 내부 사전 및 인스턴스 해시를 사용하여 인스턴스별 값을 관리할 수 있습니다. 콜백 함수가 있는 약한 참조는 삭제된 객체에 대한 참조를 제거하여 메모리 누수를 방지하는 데 도움이 됩니다.
3. 프로퍼티 조회 해결
- 파이썬은 속성 조회 시 인스턴스 사전 값보다 데이터 디스크립터를 우선합니다. dict 변수의 인스턴스 값은 비데이터 디스크립터를 재정의할 수 있습니다. property 함수는 내부적으로 데이터 디스크립터를 생성하여 인스턴스 값에 의해 대체되지 않도록 합니다.
자세한 블로그 읽어보기[EN]: https://www.zerotoexpert.blog/p/python-property-and-descriptor-zero
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 7월 13일 오후 3:56