Sobes.tech
Назад к вопросам
Junior — Middle
69

Можете ли вы объяснить назначение метода __get__() в дескрипторе Python и как он используется?

Ответ от нейросети

sobes.tech AI

Метод __get__() в Python — это часть протокола дескрипторов. Дескриптор — это объект, который управляет доступом к атрибутам другого объекта.

Когда у объекта есть атрибут-дескриптор с методом __get__(), при обращении к этому атрибуту вызывается именно этот метод.

Сигнатура метода:

def __get__(self, instance, owner):
    ...
  • self — сам дескриптор
  • instance — объект, у которого запрашивается атрибут (или None, если обращение происходит через класс)
  • owner — класс, которому принадлежит объект

Пример использования:

class Descriptor:
    def __get__(self, instance, owner):
        print(f'__get__ вызван для {instance} класса {owner}')
        return 42

class MyClass:
    attr = Descriptor()

obj = MyClass()
print(obj.attr)  # При обращении к attr вызовется Descriptor.__get__

Вывод:

__get__ вызван для <__main__.MyClass object at 0x...> класса <class '__main__.MyClass'>
42

Таким образом, __get__() позволяет контролировать, что возвращается при доступе к атрибуту, реализуя свойства, вычисляемые значения, ленивую загрузку и другие паттерны.