Descriptor
: 속성의 조회, 저장, 삭제를 커스텀할 수 있게 해주는 객체이다.
__get__ , __set__, __del__
3개의 메소드를 가지는 클래스!
(self는 descriptor 클래스의 인스턴스)
동작에 따라 각 구현된 메서드가 호출되는 객체
매직 메서드
: 메소드 중에 __로 시작해서, __로 끝나는 메소드!
가장 유명한 매직 메소드의 예로는
__init__이라는 생성자가 있다.
생성자..?
>> 객체가 생성될 때
파이썬 인터프리터에 의해
자동으로 호출되는 메소드를 의미한다.
변수 = 클래스()
: 클래스의 객체를 생성한 뒤,
변수에 바인딩하는 과정이다.
변수()
> ()를 사용하면,
클래스 내의 정의된 __call__함수를 부르는 것!
함수는 사실 'function' 클래스의 객체이다.
함수명() 와 같은 표현을 통해서
function 클래스의 __call__을 호출하는 것이다.
점(.)을 찍으면 해당 객체에 접근할 수 있게 된다.
점을 찍으면 __getattribute__라는 메서드를 호출해준다.
디스크립터는
특성 객체의 속성 접근 시,
먼저 그 속성의 특징을 체크하여 처리할 수 있는 방식이다.
non-data descriptor (get)
data descriptor (set,del)
반복 코드 없이도 재사용을 가능하게 해주는 메소드를 제공한다.
즉, descriptor을 사용하면
한 클래스의 서로 다른 많은 속성에
같은 로직을 적용하여 재사용성을 증가시킬 수 있다.
isinstance를 사용하면,
인스턴스가 어떤 클래스로 만들어졌는지 확인 가능하다.
ORM 프레임워크에 Desciptor를 쓴다.
ORM 프레임워크 (Object - Relational - Mapping) 란?
: 데이터베이스와 객체지향 프로그래밍 언어 간의
호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.
객체 관계 매핑이라고도 한다.
ORM 개념이 왜 등장했냐면!?
반복적인 코딩을 줄일 수 있게 도와주고,
SQL의 의존적인 코딩에서 벗어나도록 도와주면서
유지보수가 좀 더 편해지기 때문이다.
ORM이 없을 땐 개발자가 DB에 접근하기 위해
쿼리를 직접 만들어야했지만,,
Django와 같은 다양한 프레임워크들이 등장하면서접근성, 연동, 구축 등의 관리가 매우 편리해졌다.
아래 코드 부분, DiscriptorPath 클래스 내에서
DiscriptorCount 클래스의 인스턴스를 생성해서
s라는 변수에 바인딩하는데
이 과정에서 "./"라는 경로를 넘겨준적이 없는데
어떻게 알지..?
DiscriptorCount에 넘겨준 것도 아닌데 어떻게 obj로 받는거쥐...?
>> 질문 올려놨는데,
궁금증이 해결되면
추가해서 아래 쪽에 작성해둘 예정입니다 :)
로그 출력 예제
descriptor의 가장 큰 역할
> 재사용 가능하게 하는 것!
강의 : 모두를 위한 파이썬
참고 조사 출처
'여니의 Side Project > 인프런 - 리프 (파이썬 고급)' 카테고리의 다른 글
[인프런 리프 대학생 2기] Chapter4. 오픈소스 프로젝트(2) (0) | 2021.04.01 |
---|---|
[인프런 리프 대학생 2기] Chapter4. 오픈소스 프로젝트(1) (0) | 2021.03.30 |
[인프런 리프 대학생 2기] 3주차(1) | Chapter 3. Meta Class (0) | 2021.03.26 |
[인프런 리프 대학생 2기] 2주차 미션활동 (0) | 2021.03.18 |
[인프런 리프 대학생 2기] 2주차 미션활동 | Context Manager Annotation (0) | 2021.03.15 |