TG Telegram Group & Channel
Библиотека Python разработчика | Книги по питону | United States America (US)
Create: Update:

Когда вы пишете obj.x = y, нельзя быть уверенным, что атрибут x объекта obj действительно станет равным y. Протокол дескрипторов в Python позволяет определить, как будет обрабатываться присваивание атрибутов.


class Descriptor:
def __set__(self, obj, value):
obj.test = value

class A:
x = Descriptor()


В этом примере x напрямую никогда не присваивается значение — вместо этого устанавливается атрибут test:


>>> a = A()
>>> a.x = 42
>>> a.test
42
>>> a.x
<__main__.Descriptor at 0x7ff7baef51d0>


Если всё же нужно напрямую изменить значение x, например, в тестах или при использовании метапрограммирования, придётся обращаться напрямую к __dict__:


>>> a.__dict__['x'] = 42
>>> a.x
42


👉@BookPython

Когда вы пишете obj.x = y, нельзя быть уверенным, что атрибут x объекта obj действительно станет равным y. Протокол дескрипторов в Python позволяет определить, как будет обрабатываться присваивание атрибутов.


class Descriptor:
def __set__(self, obj, value):
obj.test = value

class A:
x = Descriptor()


В этом примере x напрямую никогда не присваивается значение — вместо этого устанавливается атрибут test:


>>> a = A()
>>> a.x = 42
>>> a.test
42
>>> a.x
<__main__.Descriptor at 0x7ff7baef51d0>


Если всё же нужно напрямую изменить значение x, например, в тестах или при использовании метапрограммирования, придётся обращаться напрямую к __dict__:


>>> a.__dict__['x'] = 42
>>> a.x
42


👉@BookPython
👍63👎1


>>Click here to continue<<

Библиотека Python разработчика | Книги по питону




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)