Python 의 descriptor 를 쉽게 이해 합 니 다.
2526 단어 pythondescriptor
일반적으로 하나의 descriptor 는'귀속 행위'의 대상 속성 을 가지 고 있다.바 인 딩 행 위 는 descriptor 프로 토 콜 을 통 해 사용자 정의get__() , __set__() 와delete__() 방법 을 다시 쓰다.한 대상 의 상기 세 가지 방법 중 하 나 를 다시 쓰 면 descriptor 라 고 할 수 있다.
속성의 기본 동작 은 대상 사전 에서 속성 을 가 져 오고 설정 하 며 삭제 하 는 것 입 니 다.예 를 들 어 a.x 에 검색 체인 이 있 는데 먼저 a.dict__['x'],없 으 면 type(a).dict__['x'],원류 까지 부 류 를 위로 찾 지 않 았 다 면.체인 을 찾 을 때 대상 이 descriptor 방법 으로 정의 되면 Python 은 기본 행동 을 덮어 씁 니 다.
Descriptor 는 강력 한 도구 입 니 다.개발 자 들 이 자주 접 하지 않 지만 클래스,속성,함수,방법,정적 방법,클래스 방법 과 슈퍼()뒤의 운영 체제 입 니 다.
설명 프로 토 콜
세 가지 방법의 원형 은 다음 과 같다.
descr.__get__(self, obj, type=None) --> value
descr.__set__(self, obj, value) --> None
descr.__delete__(self, obj) --> None
데이터 descriptor 는 동시에get__() 와set__() 방법의 대상, 만 있다 면get__() 방법 은 비 데이터 descriptor 입 니 다.인 스 턴 스 사전 에 데이터 descriptor 와 같은 이름 의 입구 가 있다 면 데이터 descriptor 우선 순위 가 더 높 습 니 다.반면 비 데이터 descriptor 우선 순위 가 낮 습 니 다.장set__() 방법 은 이상 을 던 지면 읽 기 전용 데이터 descriptor 를 만 들 수 있 습 니 다.
호출 기술자
descriptor 는 방법 명 을 통 해 직접 호출 할 수 있 습 니 다.예 를 들 어 d.get__(obj) 。
방문 대상 속성 을 통 해 descriptor 를 자동 으로 호출 하 는 것 이 더 일반적인 방법 입 니 다.예 를 들 어 d 가 방법 을 정의 하면get__() ,obj.d 가 d. 를 호출 합 니 다.get__(obj) 。
대상 에 대해 b.x 는 type(b). 로 변 환 됩 니 다.dict__['x'].__get__(b, type(b)) 。그리고 클래스(네,클래스 도 호출 할 수 있 습 니 다)에 대해 B.x 는 B. 로 전 환 됩 니 다.dict__['x'].__get__(None, B) 。
Descriptor 예
class RevealAccess(object):
"""A data descriptor that sets and returns values
normally and prints a message logging their access.
"""
def __init__(self, initval=None, name='var'):
self.val = initval
self.name = name
def __get__(self, obj, objtype):
print('Retrieving', self.name)
return self.val
def __set__(self, obj, val):
print('Updating', self.name)
self.val = val
>>> class MyClass(object):
... x = RevealAccess(10, 'var "x"')
... y = 5
...
>>> m = MyClass()
>>> m.x
Retrieving var "x"
10
>>> m.x = 20
Updating var "x"
>>> m.x
Retrieving var "x"
20
>>> m.y
5
총결산위 에서 말 한 것 은 소 편 이 소개 해 준 Python 의 descriptor 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.