Назад к вопросам
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__() позволяет контролировать, что возвращается при доступе к атрибуту, реализуя свойства, вычисляемые значения, ленивую загрузку и другие паттерны.