유명 라이브러리 코드 리뷰하기 [2023-07-02 학습일지]
어제의 다짐에 이어, 오늘은 OOP 능력 향상을 위해 유명 파이썬 모듈의 소스를 분석해보기로 했다.
'아만보'라는 과거 유행어가 있다.
"아는만큼 보인다"의 준말인데, 수학과 과학이 연관되어 있지 않는 오픈 소스 중에 그나마 보일 게 많은
"Requests"라는 유명 파이썬 오픈소스를 GitHub에서 Clone하여 읽어보기로 했다.
출처는 다음과 같다.
https://github.com/psf/requests
GitHub - psf/requests: A simple, yet elegant, HTTP library.
A simple, yet elegant, HTTP library. Contribute to psf/requests development by creating an account on GitHub.
github.com
소스 파일, 테스트 패키지들이 깔끔하다.
※ 관전포인트 : 사실 왜 __init__.py가 있는지 몰랐는데, 오늘 이해했다.
(디렉토리 밑에 __init__.py 파일이 있으면 pycharm에서 패키지로 인식함. 패키지를 쓰면, 서로 다른 namespace를 사용하여 변수명이 겹치지 않고, code 재사용성, 공동작업 및 배포등이 편해지는 장점이 있음)
메인 패키지의 init을 보면 import만 한 페이지 이상이다. 또한, try, except문을 활용하여 import 의 예외처리를 하는 것이 인상적이다.
import warnings
import urllib3
from .exceptions import RequestsDependencyWarning
try:
from charset_normalizer import __version__ as charset_normalizer_version
except ImportError:
charset_normalizer_version = None
try:
from chardet import __version__ as chardet_version
except ImportError:
chardet_version = None
...
※ 관전포인트 : import error를 처리하는 방법도 우아하다.

SOCKSProxyManager 라는 함수는 본문에 사용되는 함수인데, imort할 때 error가 발생할 경우 오버라이딩되게 하였다. 그러니, 해당 함수가 동작할 때만 에러를 일으키게 되어 코드 내부에서 매번 except처리를 하지 않아도 되었다.
※ 관전포인트 : 추상 클래스를 쓸 필요가 없다. NotImplementedError로 처리



for ~ in 구문을 통해 __dict__ 보다 우아하게 표현할 수 있다.
※ 관전포인트 : init의 파라미터를 멀티라인으로..

※ 관전포인트 : 같은 패키지 내에서는 from . import [ClassName]
※ 관전포인트 : 다(多)기능의 함수를 편리하게 세분화? 시킬 수 있다.

※ 관전포인트 : all()의 활용방법
※ 관전포인트 : 동적인 attr 추가 (request header에 추가하는 것)
※ 관전포인트 : 파라미터에서 인자 뽑아쓰기
※ 관전포인트 : iterable 삭제하는 방법
※ 관전포인트 : 동적인 인스턴스 생성
※ 관전포인트 : 함수 하나로 여러 동작 시키기

더 분석할 게 많지만 시간관계상 오늘은 여기까지 하고 다음번에 또 계속 분석하겠습니다.
감사합니다.