Decorador de propriedade de classe preguiçoso
Eu tenho um modelo de django que precisa fazer algum processamento referindo o modelo de usuário personalizado.
Não consigo trabalhar com a classe desse modelo no tempo de carregamento da classe porque a ordem de carregamento das classes é desconhecida.
Então eu preciso adicionar alguns atributos de classe em tempo de execução, no momento em que estou adicionando-os no__init__
ou__new__
gostar:
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)
Ele funciona, mas parece horrível, então eu pensei em usar algo como@lazyclassproperty
para esses atributos.
Eu encontrei vários@classproperty
e@lazyproperty
decoradores, mas não um para ambos e eu não tenho idéia de como escrever um eu mesmo.
Questão: Como eu poderia codificar esse decorador? ou sugerir outra alternativa mais limpa à minha implementação boba atual.