디스크립터는 속성을 읽고 쓰고 지울 때 실행될 동작을 객체로 정의한다. 함수, property, classmethod도 이 데이터 모델 위에 있다.
class Depth:
def __set_name__(self, owner, name):
self.name = "_" + name
def __get__(self, obj, owner):
if obj is None:
return self
return getattr(obj, self.name)
def __set__(self, obj, value):
if value < 1:
raise ValueError("depth")
setattr(obj, self.name, value)
class Ai:
depth = Depth()`property`는 한 속성의 계산과 검증에 간단한 디스크립터 인터페이스를 제공한다. 메서드였던 API를 속성으로 바꿀 때 비용이 큰 작업이나 I/O를 숨기지 않는다.
데이터 디스크립터는 인스턴스 딕셔너리보다 우선하고, 비데이터 디스크립터는 인스턴스 속성에 가려질 수 있다. 메서드는 비데이터 디스크립터이며, 접근할 때 함수와 인스턴스를 묶은 bound method가 된다.
댓글
0개아직 댓글이 없습니다.