Показаны сообщения с ярлыком debug. Показать все сообщения
Показаны сообщения с ярлыком debug. Показать все сообщения

Python: property object вместо значения

Не раз уже бывало, что при разработке на Python в какой-то части кода вместо значения интересующей переменной в дебаг-лог попадает сообщение вроде этого:
INFO src.wiki.views views.dispatch:123 'content': '<property object at 0x10ae22f70>'
То, что у получение значения content в этом классе реализовано через property,- и так понятно, но почему вылезает этот самый самый загадочный property object вместо значения? Всё не просто, а очень просто: во всех этих случаях была попытка получить значение из функции, обёрнутой в @property, но не из экземпляра класса, а из самого класса.

Такое происходит из-за того, что в Python всё является объектами, даже классы. Запрашивая свойство (property) у класса вместо экземпляра,- получаем запрошенное, но это не значение,- а сам метод, вложенный в объект property.

То есть,- что запросил,- то и получил. Просто надо быть внимательнее и избегать неудачных паттернов, при которых в принципе возможно использование переменной - класса вместо переменной - экземпляра.

Python: наследование и логирование

Не знаю кто как, а я ленивый. Писать длинные строки кода, или повторять один и то-же код много раз в разных местах мне кажется неправильным и нерациональным. Это утверждение в полной мере относится и к записи отладочных сообщений. Если мне нужно организовать правильную запись логов в проекте, многочисленные мануалы рекомендуют использовать примерно такое: