python描述器问题
怪我咯
怪我咯 2017-04-17 17:07:28
0
1
482
怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(1)
Ty80

우선 분명히 말씀드리자면

  • __get__ 및 __set__ 메소드를 모두 포함하는 설명자를 데이터 설명자

  • 라고 합니다.
  • __get__ 메소드만 포함하는 설명자를 비데이터 설명자

  • 라고 합니다.

그런 다음 obj.attr을 예로 들어 Python에서 속성 검색 순서를 명확히 합니다.

  1. attr이 __class__, __doc__ 및 dir(obj)의 다른 속성인 경우 직접 찾습니다.

  2. obj.__class__.__dict__에서 attr이라는 데이터 설명자를 찾고 attr.__get__(obj, obj.__class__)를 반환하지만 찾을 수 없습니다. . obj의 상위 클래스와 상위 클래스에서 데이터 설명자를 계속 검색합니다.

  3. obj.__dict__에서 검색합니다. obj가 공통 인스턴스인 경우 발견되면 직접 반환하고, 그렇지 않으면 obj가 클래스인 경우 obj.__dict__에서 설명자를 검색하고 발견되면 반환합니다. . attr.__get__(
  4. None, obj

    )을 찾을 수 없으면 상위 클래스와 상위 클래스에서 설명자를 계속 찾습니다.

  5. obj.__class__.__dict__에서
  6. 비데이터 설명자

    를 찾고 attr.__get__(obj, obj.__class__)를 반환합니다.

  7. obj.__class__.__dict__에서 공통 속성을 찾아 발견하면 직접 반환합니다.
  8. attr 속성을 찾을 수 없으며 예외가 발생합니다.
  9. 위 검색 순서에 따르면 다음을 알 수 있습니다.
Father.name: 인스턴스<-None, owner<-Father

Kid.name:instance<-None, owner<-Kid
f .name:인스턴스&lt ;-f, 소유자<-아버지

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿