여니의 Side Project/인프런 - 리프 (파이썬 고급)

[인프런 리프 대학생 2기] 3주차(2) Chapter 3.1 Descriptor

여니's 2021. 3. 26. 20:46

 


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의 가장 큰 역할

> 재사용 가능하게 하는 것!


강의 : 모두를 위한 파이썬

inf.run/Etom

 

모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original) - 인프런 | 강

폭넓은 파이썬 개발 경험, 온오프라인 수업 경험을 바탕으로 파이썬 메타프로그래밍, 깊이있는 문법을 다루기 위한 과정입니다. 더 나아가 파이썬 취준생 면접 및 경력자분들의 기술면접에도

www.inflearn.com

 


참고 조사 출처

wikidocs.net/83755

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net