Когда и почему я могу назначить экземпляр класса дескриптора атрибуту класса в Python, а не использовать свойство? - PullRequest
15 голосов
/ 30 апреля 2011

Мне известно, что свойство является дескриптором, но есть ли конкретные примеры того, как использование класса дескриптора может быть более выгодным, питонным или обеспечивать некоторое преимущество по сравнению с использованием @property в методе функционировать?

Ответы [ 3 ]

8 голосов
/ 30 апреля 2011

Лучшая инкапсуляция и возможность повторного использования: класс дескриптора может иметь настраиваемые атрибуты, установленные при создании экземпляра Иногда полезно ограничивать данные таким образом, вместо того, чтобы беспокоиться о том, что они будут установлены или перезаписаны владельцем дескриптора.

3 голосов
/ 18 марта 2013

Позвольте мне привести цитату из отличного видео EuroPython 2012 "Обнаружение дескрипторов" :

Как выбирать между дескрипторами и свойствами:

  • Свойства работают лучше всего, когдаони знают о классе
  • Дескрипторы являются более общими, часто могут применяться к любому классу
  • Использовать дескрипторы, если поведение отличается для классов и экземпляров
  • Свойства являются синтаксическим сахаром

Также обратите внимание, что вы можете использовать __slots__ с дескрипторами.

0 голосов
/ 30 апреля 2011
Свойство

@ не позволяет вам определять выделенные методы setter и getter одновременно. Если метод получения «достаточно хорош», используйте @property, в противном случае вам понадобится property ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...