들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item37 요약 딕셔너리, 긴 튜플이 여러 Depth로 내포되는 경우 클래스로 분리해 가독성 확보, 캡슐화를 하는 것이 필수다. Item 37. 내장 타입을 여러 단계로 내포시키기보다는 클래스를 합성하라. 파이썬은 딕셔너리 타입을 제공해준다. 딕셔너리에는 동적으로 Key / Value를 추가할 수 있다. 이것은 편리함도 있지만, 문제점을 가져오기도 한다. 딕셔너리를 사용할 때 고려해야할 점을 살펴보자. 딕셔너리는 동적으로 손쉽게 Key / Value를 추가할 수 있다. 따라서 확장이 쉽다. 쉬운 확장 때문에 여..
참고 https://docs.python.org/ko/3.11/whatsnew/3.11.html TypedDict에 Required / Non-Required 인자 추가 from typing import TypedDict, Required, NotRequired class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars"} # OK (year is not required) m3: Movie = {"year": 2022} # ERROR (missing required field title) 타입 힌트를..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item41 요약 믹스인 클래스는 다음을 의미함. 공통으로 사용할 메서드만 몇개 구현함. 믹스인 클래스는 멤버 변수가 없음. 따라서 __init__()를 구현할 필요가 없음. 파이썬의 다중상속은 디버깅에 어려움을 가져옴. 따라서 꼭 필요한 경우가 아니라면, 다중상속 대신 믹스인 클래스를 합성하자. 믹스인 클래스가 제공하는 메서드는 필요한 경우 오버라이드 해서 사용할 수 있음. 믹스인은 클래스 수준(@classmethod)의 기능 / 인스턴스 수준의 기능을 제공할 수 있음. Item41. 기능을 합성할 때는 믹스인 ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item51 요약 클래스 데코레이터는 class 인스턴스를 파라미터로 받아서 이 클래스를 변경한 클래스나 새로운 클래스를 반환해주는 간단한 함수다. 준비 코드를 최소화하면서 클래스 내부의 모든 메서드나 어트리뷰트를 변경하고 싶을 때, 클레스 데코레이터가 유용하다. 메타 클래스는 서로 쉽게 합성할 수 없지만, 여러 클래스 데코레이터를 충돌 없이 사용해 똑같은 클래스를 확장할 수 있다. 클래스 전체적으로 데코레이터 사용하는 방법 클래스 함수마다 필요한 데코레이터 붙이기 가독성에 문제 있음 / 데코레이터 실수로 놓칠 ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item47 요약 인스턴스 어트리뷰트에 접근(hello.value, hasattr 등)하면 항상 __getattribute__() 메서드가 호출됨. __getattribute__()를 호출했을 때, 어트리뷰트가 없으면 AttributeError가 발생함. 이 때, __getattr__() 메서드가 호출됨. 인스턴스 어트리뷰트에 값을 대입(예시, a.hello = 10)하면, __setattr__()이 항상 호출됨. __getattribute__, __getattr__, setattr__에서 무한 재귀 문제를 막기..