【发布时间】:2011-02-11 02:15:05
【问题描述】:
我正在查看 pyFacebook 库的源代码,发现以下代码:
def require_login(next=None, internal=None, required_permissions=None):
def decorator(view):
def newview(request, *args, **kwargs):
next = newview.next
internal = newview.internal
try:
fb = request.facebook
except:
raise ImproperlyConfigured('Make sure you have the Facebook middleware installed.')
if internal is None:
internal = request.facebook.internal
...
return view(request, *args, **kwargs)
newview.next = next
newview.internal = internal
return newview
return decorator
我试图跳过不相关的代码,因此中间有省略号。完整列表可以在https://github.com/sciyoshi/pyfacebook/blob/master/facebook/djangofb/__init__.py找到。
我的困惑源于第四行对嵌套函数的“下一个”属性的引用。我无法弄清楚newview.next 的值应该是多少,每当我自己尝试类似的实验时,我都会收到“函数没有内部属性”错误。但是,该代码可以正常工作,因为我在 django 项目中使用它时没有问题。如果有人能向我解释这里发生了什么,我会非常高兴。
【问题讨论】:
-
我已经编辑了我的答案 - 现在它向您展示了与您在演示代码中的 pyFacebook 中看到的完全相同的情况。
-
注意:不要做这个sn-p的程序员做的事情,重命名
next。next是一个内置函数。