Дескриптор - это
Published 22 июля 2025 г. 17:45 by max_summer
Дескриптор — это объект в Python, который определяет, как обращаться к атрибуту другого объекта. Он позволяет контролировать доступ к атрибутам, их чтение, запись и удаление, используя специальные методы.
Основные методы дескриптора:
__get__(self, instance, owner)
— вызывается при доступе к атрибуту.__set__(self, instance, value)
— вызывается при присваивании значения атрибуту.__delete__(self, instance)
— вызывается при удалении атрибута.
Пример простого дескриптора:
```python class Descriptor: def get(self, instance, owner): print("Getting attribute") return instance._value
def __set__(self, instance, value):
print("Setting attribute")
instance._value = value
def __delete__(self, instance):
print("Deleting attribute")
del instance._value
class MyClass: attr = Descriptor() # Дескриптор как атрибут класса
obj = MyClass() obj.attr = 42 # Вызовет set print(obj.attr) # Вызовет get del obj.attr # Вызовет delete ```
Типы дескрипторов:
- Дескриптор данных — реализует
__set__
и__get__
(или хотя бы один из них). - Недескриптор данных — реализует только
__get__
(например, методы класса или статические методы).
Применение:
Дескрипторы часто используются для:
- Валидации данных.
- Логирования доступа к атрибутам.
- Реализации свойств (@property
— это упрощённый дескриптор).
- Создания сложных атрибутов (например, в ORM, как в Django или SQLAlchemy).
Пример с валидацией:
```python class PositiveNumber: def set(self, instance, value): if value <= 0: raise ValueError("Value must be positive") instance._value = value
def __get__(self, instance, owner):
return instance._value
class MyClass: number = PositiveNumber()
obj = MyClass() obj.number = 10 # OK obj.number = -5 # ValueError ```
Таким образом, дескрипторы предоставляют мощный механизм для управления атрибутами объектов в Python.
Similar posts
There are no similar posts yet.
0 comments
There are no comments