BOOKPYTHON Telegram 3595
Когда вы пишете 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



tgoop.com/BookPython/3595
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

Write your hashtags in the language of your target audience. To edit your name or bio, click the Menu icon and select “Manage Channel.” To upload a logo, click the Menu icon and select “Manage Channel.” In a new window, hit the Camera icon. Concise Activate up to 20 bots
from us


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