tgoop.com/BookPython/3595
Create:
Last Update:
Last 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
BY Библиотека Python разработчика | Книги по питону
Share with your friend now:
tgoop.com/BookPython/3595