Студия Питониста | Python
151 subscribers
40 photos
10 files
23 links
В канале вы найдёте множество полезных материалов про Python: практичные статьи, увлекательные обучалки и ещё много чего.

По вопросам и предложениям - @NeuroBot_ad.
Download Telegram
🔗 Основы дескрипторов в Python — Часть 1

▎Введение

Дескрипторы (descriptors) в Python — это механизм управления доступом к атрибутам объекта. Дескрипторы позволяют контролировать, что происходит при чтении, записи и удалении атрибутов класса. Если объект класса содержит один или несколько специальных методов: __get__, __set__ и __delete__, он считается дескриптором.

Дескрипторы часто применяются в ORM, управлении доступом к свойствам и оптимизации работы с памятью.

▎Механизм работы дескрипторов

В Python существуют два типа дескрипторов:

1. Дескрипторы данных (data descriptors) — реализуют методы __get__ и __set__.
2. Недельные дескрипторы (non-data descriptors) — реализуют только метод __get__.

Дескрипторы управляют доступом к атрибутам, и их методы вызываются автоматически при попытке чтения, изменения или удаления атрибута.

▎Методы дескрипторов

1. __get__(self, instance, owner) — вызывается при чтении атрибута.
2. __set__(self, instance, value) — вызывается при присвоении значения атрибуту.
3. __delete__(self, instance) — вызывается при удалении атрибута.

▎Как подставляются аргументы в методы дескриптора

Когда вы обращаетесь к атрибуту объекта, который является дескриптором, Python автоматически подставляет необходимые аргументы:

1. self — это сам объект-дескриптор.
2. instance — это объект, из которого был вызван атрибут. Если атрибут вызван через класс, instance будет None.
3. owner — это класс, из которого был вызван атрибут.

▎Пример дескриптора данных

class Celsius:
def __get__(self, instance, owner):
return instance._celsius

def __set__(self, instance, value):
if value < -273.15:
raise ValueError("Температура ниже абсолютного нуля невозможна!")
instance._celsius = value

class Temperature:
celsius = Celsius()

def __init__(self, celsius):
self.celsius = celsius

# Пример использования
t = Temperature(25)
print(t.celsius) # 25
t.celsius = -300 # Ошибка: Температура ниже абсолютного нуля невозможна!


В этом примере класс Celsius является дескриптором данных, который управляет доступом к атрибуту celsius в классе Temperature.

▎Заключение

Дескрипторы — это (ещё раз) инструмент для управления атрибутами классов. Понимание их принципов позволяет глубже контролировать поведение объектов в Python.


#Обучение #ООП | #дескрипторы
@X_Python
3
🔗 Продвинутые возможности дескрипторов в Python — Часть 2

▎Пример недельного дескриптора

Недельные дескрипторы, в отличие от дескрипторов данных, реализуют только метод __get__. Они используются, когда нужно только контролировать доступ на чтение атрибута.

class Square:
def __get__(self, instance, owner):
return instance._side ** 2

class Rectangle:
side = Square()

def __init__(self, side):
self._side = side

# Пример использования
r = Rectangle(4)
print(r.side) # 16


В этом примере класс Square — недельный дескриптор, который вычисляет площадь квадрата. Аргументы instance и owner автоматически подставляются при вызове метода дескриптора: instance — это объект r, а owner — класс Rectangle.

▎Порядок разрешения атрибутов

При доступе к атрибуту Python определяет порядок разрешения следующим образом:

1. Если атрибут является дескриптором данных, он имеет приоритет над атрибутом экземпляра класса.

2. Если атрибут является недельным дескриптором, то приоритет отдается атрибуту экземпляра, и если он не найден, то вызывается дескриптор.

▎Применение дескрипторов

1. Свойства: Механизм дескрипторов лежит в основе встроенного механизма свойств через декоратор @property. Вот пример:

class MyClass:
@property
def value(self):
return self._value


@property использует дескрипторы для управления доступом к атрибутам объекта.

2. ORM: В ORM дескрипторы могут использоваться для управления полями базы данных. Например, доступ к данным может быть реализован через дескриптор, который автоматически выполняет SQL-запросы для получения или обновления данных.

3. Кеширование: Дескрипторы полезны для реализации ленивых вычислений и кеширования результатов. Можно использовать дескриптор для вычисления значения только при первом доступе и сохранения результата для последующих обращений.

▎Заключение

Продвинутые возможности дескрипторов позволяют управлять доступом к атрибутам более гибко и эффективно. Их использование может значительно упростить работу с кодом, особенно в сложных проектах, таких как ORM или кеширование данных. Это «вывод» из поста.


#Обучение #ООП | #дескрипторы
@X_Python
👍4
Приглашаем beta-тестировщиков AI-платформы для изучения английского 🔥

Привет, сообщество! 👋
Мы возвращаемся с новым проектом — инновационным сервисом для изучения английского. И нам нужна ваша помощь!

Что предлагаем:
🔴 Бесплатный доступ навсегда (обычная цена — 500₽/мес) за фидбек и идеи (как от beta-тестировщика).
🔴 Уникальный метод обучения с AI.
🔴 Шанс повлиять на стартап — ваше мнение определит развитие проекта!

Для кого это актуально?
✔️ Хотите подтянуть английский для работы в IT или переговоров с заказчиками.
✔️ Мечтаете читать документацию и статьи в оригинале.

Как присоединиться?
Напишите мне (@VokabooCEO) в личные сообщения 🖐
4🔥2👍1