我在用户体验设计金字塔教程 http://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/humans/creatingux/step06/index.html。我不太明白这个装饰器是做什么的。
我看到它的用法的示例代码。
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"}
来自源代码文档:
""" 放置使用此方法的结果(非数据)
第一次调用后实例字典中的描述符装饰器,
有效地用实例变量替换装饰器。"""
描述来自来自模糊记事本博客 http://me.veekun.com/blog/2012/05/23/python-faq-descriptors/总结得很好。
它的行为类似于 @property,只不过该函数仅被调用
一次;之后,该值将被缓存为常规属性。这
为您提供了在本来应该的对象上创建惰性属性的功能
不可变的。
因此,在您发布的代码中,可以像缓存属性一样访问站点菜单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)