__repr__, __str__의 차이점
·
프로그래밍 언어/파이썬
__repr__와 __str__는 파이썬에서 객체를 문자열로 표현하기 위해 사용되는 두 가지 매직 메소드입니다. 이 둘은 비슷해 보일 수 있지만, 사용 목적과 호출되는 상황에서 차이가 있습니다. __repr__ 메소드: __repr__의 주 목적은 객체의 공식적인 문자열 표현을 제공하는 것입니다. 이 문자열은 가능한 한 해당 객체를 정확하게 나타낼 수 있어야 합니다. 이상적으로는, __repr__에 의해 반환된 문자열을 사용하여 해당 객체를 재생성할 수 있을 정도로 정확해야 합니다(예: eval(repr(object)) == object). __repr__는 주로 개발자가 사용하며, 디버깅과 로깅에서 유용하게 활용됩니다. 파이썬 인터프리터에서 객체를 단독으로 평가했을 때 보이는 결과는 __repr__ 메..
MRO(Method Resolution Order)
·
프로그래밍 언어/파이썬
파이썬에서 MRO(Method Resolution Order)는 클래스에서 메서드를 검색할 때 사용되는 순서를 말합니다. 특히 파이썬의 클래스 상속이 다중 상속을 포함할 수 있기 때문에, 어떤 순서로 메서드를 찾아야 할지 결정하는 규칙이 필요합니다. 파이썬은 이를 위해 C3 선형화 알고리즘을 사용하여 클래스의 MRO를 결정합니다. 이 알고리즘은 클래스의 상속 구조를 선형 리스트로 변환하여, 메서드 호출 시 어떤 클래스의 메서드를 사용할지 명확하게 합니다. MRO의 중요성 MRO는 다중 상속 시 발생할 수 있는 복잡성과 모호성을 해결합니다. 특정 메서드를 호출할 때, 파이썬은 이 MRO 리스트를 따라서 해당 메서드를 가진 첫 번째 클래스를 찾아 그 메서드를 실행합니다. 이는 프로그램의 일관성을 유지하고 예..
GIL(Global Interpreter Lock)
·
프로그래밍 언어/파이썬
python Interpreter GIL 이해를 위해 수행되어야 하는 것은 파이썬 인터프리터의 이해입니다. 파이썬 인터프리터 : 파이썬 문법으로 작성된 코드를 한 줄씩 읽으면서 실행하는 프로그램 파이썬 인터프리터의 표준은 CPython입니다. C언어를 이용하여 구현한 파이썬 인터프리터입니다. GIL(Goloba Interpreter Lock) 전역 인터프리터 락. 위키에서의 정의는 아래와 같음. > In CPython, the global interpreter lock, or GIL, is a mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at once. This..
데코레이터란?
·
프로그래밍 언어/파이썬
뭐지? 파이썬의 데코레이터는 함수나 메소드의 변환을 위해 사용되는 함수입니다. 데코레이터를 사용하면 기존의 코드를 수정하지 않고도 함수의 기능을 확장하거나 변경할 수 있습니다. 이는 코드의 재사용성을 높이고, 가독성을 향상시키며, 유지보수를 용이하게 합니다. 데코레이터는 @(골뱅이) 기호를 함수 위에 적용하게 됩니다. 데코레이터는 실행시간에 함수를 감싸서(wrap) 실행 전후에 추가적인 코드를 실행할 수 있게 해주며, 이를 통해 함수의 행동을 수정합니다. 기본구조 def my_decorator(func): def wrapper(): # 여기에 함수 호출 전 실행할 코드를 작성합니다. print("함수 호출 전") func() # 여기에 함수 호출 후 실행할 코드를 작성합니다. print("함수 호출 후"..
List와 Tuple의 차이
·
프로그래밍 언어/파이썬
개요 리스트와 튜플은 파이썬에서 가장 기본적인 데이터 구조 중 2가지 여러 값을 하나의 변수에 저장 할 수 있게함. 특징 1. 변경 가능성 리스트 변경 가능한 객체 리스트 생성 후 내용을 변경 할 수 있음(추가, 삭제, 변경) 튜플 변경 불가능한 객체 생성 후 내용을 변경 불가 2. 문법적 차이 리스트 대괄호([]) 사용. 예: my_list = [1, 2, 3] my_list = [1, 2, 3] 튜플 소괄호(()) 사용. 예: my_tuple = (1, 2, 3) 소괄호 생략 가능하지만, 단일 항목 튜플은 콤마(,) 필요. 예: single_tuple = (4,) my_tuple = (1, 2, 3) single_tuple = (4,) # 단일 항목 튜플 3. 사용 용도 리스트 요소 변경이 필요한 경..
FastAPI를 이용한 TDD 개발 - 8
·
프로그래밍 언어/파이썬
Code Coverage 코드 커버리지는 테스트 중에 실행되는 코드의 양을 측정한 것입니다. 테스트 스위트에 코드 적용 범위를 추가하면 테스트에서 다루지 않는 코드 영역을 찾을 수 있습니다. Coverage.py 는 Python 기반 애플리케이션에서 코드 적용 범위를 측정하는 데 널리 사용되는 도구입니다. 이제 pytest를 사용하고 있으므로 pytest-cov를 사용하여 Coverage.py를 pytest와 통합하겠습니다 . requirements.txt에 추가적으로 라이브러리와 버전을 작성합니다. pytest-cov==4.1.0 `.coveragerc` 파일을 이용하여 coverage report 를 수정 할 수 있습니다. project 디렉토리에 추가해주도록 합니다. [run] omit = test..
FastAPI를 이용한 TDD 개발 - 6
·
프로그래밍 언어/파이썬
TDD 를 이용하여서 3개의 새로운 endpoint를 RESTful 개발로 진행하겠습니다. /summaries GET READ get all summaries /summaries/:id GET READ get a single summary /summaries POST CREATE add a summary 각각의 엔드포인트에서 1. 테스트를 작성합니다. 2. 테스트 코드가 실패하는 것을 확인합니다.(레드) 3. 테스트 코드가 통과 되도록 코드를 작성합니다(그린) 4. 리팩토링합니다. Post Route app 디렉토리 아래 api 디렉토리 아래 summaries.py 모듈을 작성하겠습니다. # project/app/api/summaries.py from fastapi import APIRouter, HTT..
FastAPI를 이용한 TDD 개발 - 5
·
프로그래밍 언어/파이썬
App Structure 테스트가 잘 수행 되었면 앱을 리팩터링하고 FastAPI의 APIRouter, 새로운 데이터베이스 초기화 함수 및 pydantic 모델을 추가해 보겠습니다. API라우터 먼저 "app" 폴더에 "api"라는 새 폴더를 추가합니다. 새로 생성된 폴더에 __init__.py 파일을 추가합니다 . 이제 경로를 project/app/api/ping.py/ping 라는 새 파일로 이동할 수 있습니다 . # project/app/api/ping.py from fastapi import APIRouter, Depends from app.config import get_settings, Settings router = APIRouter() @router.get("/ping") async def..