참고 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__에서 무한 재귀 문제를 막기..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item39 요약 파이썬 클래스에서는 생성자가 __init__ 메서드 뿐이다. @classmethod를 사용하면 클래스에 다른 생성자를 정의할 수 있다. 클래스 메서드 다형성을 활용하면 여러 구체적인 하위 클래스의 객체를 만들고 연결하는 제네릭한 방법을 제공할 수 있다. Effective Python Item 39. 객체를 제네릭하게 구성하려면 @classmethod를 통해 클래스 다형성을 활용하라 다형성은 객체, 클래스가 같은 '인터페이스를 제공'하는 경우에 서로 다른 기능을 제공할 수 있는 성질을 의미한다. 파..