Python 3.4+typesпонятие
types.DynamicClassAttribute
дескрипторы и обёртки C
Дескриптор, который работает как property на экземпляре, а при обращении через класс отправляет поиск в __getattr__ метакласса. Так enum даёт членам атрибуты name и value.
Синтаксис
@types.DynamicClassAttribute
def name(self): ...
Задача, которую он решает: у экземпляра и у класса должен быть атрибут с одним и тем же именем, но разным смыслом. Обычный property на классе вернул бы сам объект property; DynamicClassAttribute вместо этого поднимает AttributeError, и Python идёт в __getattr__ метакласса. Без такого метакласса обращение через класс просто падает. В повседневном коде он почти не нужен — встречается при чтении исходников enum.
Примеры
import types
class Item:
@types.DynamicClassAttribute
def kind(self):
return 'instance'
print(Item().kind) # → instance
try:
Item.kind
except AttributeError:
print('AttributeError') # → AttributeError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности