Почему __get__ принимает владельца, а __set__ и __delete__ — нет?Python

Программы на Python
Ответить
Anonymous
 Почему __get__ принимает владельца, а __set__ и __delete__ — нет?

Сообщение Anonymous »

Из документации по модели данных Python:

Код: Выделить всё

object.__get__(self, instance, owner=None)
Вызывается для получения атрибута класса владельца (доступ к атрибуту класса) или экземпляра этого класса (доступ к атрибуту экземпляра). Необязательный аргумент владельца — это класс владельца, а экземпляр — это экземпляр, через который был осуществлен доступ к атрибуту, или None, когда доступ к атрибуту осуществляется через владельца.
Этот метод должен возвращать вычисленное значение атрибута или вызывать исключение AttributeError.
PEP 252 указывает, что __get__() вызываемый с одним или двумя аргументами. Собственные встроенные дескрипторы Python поддерживают эту спецификацию; однако вполне вероятно, что некоторые сторонние инструменты имеют дескрипторы, которым требуются оба аргумента. Собственная реализация Python __getattribute__() всегда передает оба аргумента, независимо от того, требуются они или нет.

Код: Выделить всё

object.__set__(self, instance, value)
Вызывается для установки атрибута экземпляра экземпляра класса владельца в новое значение value.
Обратите внимание: добавление __set__() или __delete__() меняет тип дескриптора на «дескриптор данных». Дополнительную информацию см. в разделе «Вызов дескрипторов».

Код: Выделить всё

object.__delete__(self, instance)
Вызывается для удаления атрибута в экземпляре экземпляра класса-владельца.

Почему __get__ принимает владельца, а __set__ и __delete__ — нет?
Означает ли это, что когда дескриптор предоставляет оба __get__ и __set__,
  • мы можем получить атрибут независимо от того, принадлежит ли он экземпляру класса владельца или классу владельца,
    мы можем устанавливать и удалять атрибут, когда он принадлежит экземпляру класса-владельца, но не когда он принадлежит классу-владельцу?
Мой вопрос на самом деле является частью этого.

Подробнее здесь: https://stackoverflow.com/questions/449 ... ete-do-not
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»