Ленивый декоратор класса недвижимости
У меня есть одна модель Django, которая должна выполнить некоторую обработку, ссылаясь на пользовательскую модель.
Я не могу работать с классом этой модели во время загрузки классов, потому что порядок загрузки классов неизвестен.
Поэтому мне нужно добавить некоторые атрибуты класса во время выполнения, в данный момент я добавляю их в__init__
или же__new__
любить:
def __new__(cls, *args, **kwargs):
# hack to avoid INSTALLED_APPS initialization conflicts.
# get_user_model() can't be called from this module at class loading time,
# so some class attributes must be added later.
# Metaclasses could me more appropiate but I don't want to override
# dango's metaclasses.
if not hasattr(cls, '_reverse_field_name_to_user'):
cls._find_reverse_field_name_to_user()
return Group.__new__(cls, *args, **kwargs)
Это работает, но выглядит ужасно, поэтому я подумал об использовании чего-то вроде@lazyclassproperty
для этих атрибутов.
Я нашел несколько@classproperty
а также@lazyproperty
декораторы, но не один для обоих, и я не знаю, как написать один сам.
Вопрос: Как я мог написать такой декоратор? или предложить другую более чистую альтернативу моей нынешней глупой реализации.