이 글은 파이썬의 속성 설명자에 대한 자세한 소개(코드 예제)를 제공합니다. 특정 참조 값이 있으므로 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
초보자로서 매일매일 꾸준히 책을 읽고 지식을 배우고 있습니다. 오늘은 좋은 점을 소개해 드리겠습니다. 속성 설명자
속성 설명자란 무엇인가요?
사실 클래스에 구현된 set__, __get__, __delete 중 모든 마법 함수는 속성 설명자입니다.
다음으로 속성 설명자를 정의합니다.
class IntegerField: def __get__(self, instance, owner): pass def __set__(self, instance, value): pass def __delete__(self, instance): pass class User: high= IntField()
__get__: 클래스나 인스턴스로 이 속성을 호출하면 __get__ 함수의 결과가 반환됩니다.
__set__: instance를 사용하여 속성 값을 설정할 때 Python은 이 함수를 호출합니다. 수업에는 제한이 없습니다.
__delete__: Python은 인스턴스를 사용하여 속성을 삭제하려고 할 때 이 함수를 호출합니다. 수업에는 제한이 없습니다.
이걸 어떻게 사용하나요? 다음으로, 속성 설명자를 사용하여 속성에 특정 논리를 첨부할 수 있도록 위 코드를 수정하겠습니다.
class IntegerField: def __get__(self, instance, owner): return self.value def __set__(self, instance, value): if not isinstance(value,numbers.Integral): raise ValueError("请输入一个整数") self.value=value def __delete__(self, instance): pass class User: high=IntegerField() #验证代码 if __name__ == '__main__': user=User() user.high='175' #报错,ValueError:请输入一个整数 User.high=175 #正确执行,不报错
.
실제로 속성 설명자 아래에도
1로 나누어져 있습니다. 데이터 설명자: __set__ 구현, __get__
if __name__ == '__main__': user=User() user.high=175 print(user.__dict__) #high是不放入__dict__中的,优先查找数据描述符中的值 user.__dict__["high"]="abc" #这样赋值时可以的,并且可以放入__dict__中 print(user.high) #会报错,因为在调用__get__方法时并没有value属性
2 비데이터: __get__을 구현하지만 __set__
class NonField: def __init__(self, high=170): self.value = high def __get__(self, instance, owner): return self.value class User: high = NonField() if __name__ == '__main__': user = User() user.high = '175' #会放入user.__dict__中 print(user.__dict__)을 구현하지 않습니다.
위 내용은 Python의 속성 설명자에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!