pronunciation - python pyramid tutorial
¿Qué hace ''@reify'' y cuándo debe usarse? (2)
De la documentación del código fuente:
"" "Coloque el resultado de un método que use este decorador descriptor (no de datos) en el dictado de instancia después de la primera llamada, reemplazando efectivamente al decorador con una variable de instancia." ""
Una descripción del blog de bloc de notas difusa lo resume muy bien.
Actúa como @propiedad, excepto que la función solo se llama una vez; después de eso, el valor se almacena en caché como un atributo regular. Esto le proporciona una creación perezosa de atributos en objetos que deben ser inmutables.
Por lo tanto, en el código que usted publicó, site_menu puede ser accesos como una propiedad en caché.
Lo vi en el tutorial de Pyramid para el diseño de UX . No pude distinguir mucho de lo que se trata este decorador.
Código de muestra donde vi su uso.
def __init__(self, request):
self.request = request
renderer = get_renderer("templates/global_layout.pt")
self.global_template = renderer.implementation().macros[''layout'']
@reify
def company_name(self):
return COMPANY
@reify
def site_menu(self):
new_menu = SITE_MENU[:]
url = self.request.url
for menu in new_menu:
if menu[''title''] == ''Home'':
menu[''current''] = url.endswith(''/'')
else:
menu[''current''] = url.endswith(menu[''href''])
return new_menu
@view_config(renderer="templates/index.pt")
def index_view(self):
return {"page_title": "Home"}
@view_config(renderer="templates/about.pt", name="about.html")
def about_view(self):
return {"page_title": "About"}
Según la cadena doc. ( source ):
""" Put the result of a method which uses this (non-data)
descriptor decorator in the instance dict after the first call,
effectively replacing the decorator with an instance variable."""