프로그래밍 언어/Python 13

디스크립터 __set_name__ 의 활용방법

__ set_name __ 를 활용하기 이전에, 해당 디스크립터가 필요하게 된 상황을 알아보자 class Field: def __init__(self, name): self.name = name self.internal_name = '_' + self.name def __get__(self, instance, instance_type): if instance is None: return self return getattr(instance, self.internal_name, '') def __set__(self, instance, value): setattr(instance, self.internal_name, value) class Customer: first_name = Field('first_nam..

메타클래스와 init_subclass

이펙티브 파이썬에서 메타클래스를 사용을 하여 기존의 클래스들을 리팩토링하는 방법들을 제시해주었다. 훌륭한 제안들을 아무 생각없이 읽다가 문득, 응? 근데 메타클래스가 뭐임? 한마디로 처음부터 다시 읽어야 했다. 메타클래스란 클래스 생성하는 것을 제어하는 클래스라고 볼 수 있다. 나는 이 정의를 보고 클래스를 vaildation 해주는 클래스라고 이해했다. 클래스의 클래스 랄까? 정의를 보았으니 메타클래스가 만들어진 흐름까지 보고 싶었다. 파이썬 초기버전: 파이썬의 초기 버전에서는 메타클래스와 같은 개념이 명확하게 존재하지 않음. 대신 클래스와 타입은 별개의 것으로 취급. 이 때문에 일반 사용자 클래스와 내장 타입 (예: 리스트, 딕셔너리) 사이에 뚜렷한 차이존재. 파이썬 2.x 시리즈: 파이썬 2.x에서..

@classmethod 는 왜 쓸까?

@classmethod 를 왜 쓸까? 에 대해서 팩토리 매서드로 사용 상속에서 활용 정적메서드와 구분 클래스 변수 수정 위에 있는 특징들을 설명해주었지만, 나는 인스턴스 함수와의 구분을 하지 못하겠다. 추가적으로 인스턴스 함수와 클래스 함수를 왜 따로 구분해줘야 하는지도 잘 모르겠다. 라고 생각했고 이 둘에 대한 차이점을 찾아보니 이러했다. class MyClass: class_variable = "I'm a class variable." def __init__(self, value): self.instance_variable = value def set_instance_variable(self, value): self.instance_variable = value @classmethod def set_..