2
我一直在尋找通過的來源爲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
我試圖跳過irrelelvant代碼,因此在中間的省略號。完整列表可以在https://github.com/sciyoshi/pyfacebook/blob/master/facebook/djangofb/__init__.py
我的困惑源於第四行的引用到嵌套函數的'next'屬性。我無法弄清newview.next
應該是什麼值,只要我自己嘗試類似的實驗,我就會得到'函數沒有內部屬性'的錯誤。然而,代碼工作,因爲我在django項目中使用它沒有問題。如果有人能向我解釋這裏發生了什麼,會非常高興。
我已經編輯我的答案定義 - 現在它顯示你到底你在日pyFacebook在演示代碼中看到了同樣的情況。 – PoltoS 2011-02-11 02:47:22
注意:不要做這段代碼的程序員,重命名`next`。 `next`是一個內建函數。 – SingleNegationElimination 2011-02-11 03:56:01