Python Glossary English

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Сообщить о неточности