2012-06-20 94 views
0

我正在瀏覽django教程,我想知道在views.py中有兩個具有相同名稱的函數時會發生什麼?可以通過django查看功能互相覆蓋嗎?

例如:

def results(request, poll_id): 
    p = get_object_or_404(Poll, pk=poll_id) 
    return render_to_response('polls/results.html', {'poll': p}) 

def results(request, poll_id): 
    return HttpResponse("You're looking at the results of poll %s." % poll_id) 

當我跑的代碼,底部功能是被稱爲一個。這個怎麼用?

回答

5

在Python中,方法和函數可以接受任意數量的參數;這就否定了需要有不同的函數「簽名」來支持通過的不同類型的參數;這是函數重載的常見用例。請參閱python文檔中的4.7.3. Arbitrary Argument Lists

第二種方法被調用的原因是因爲當您使用相同的名稱(和相同的參數列表)定義它時,您只是覆蓋方法定義。對於Python,這是一樣的:

>>> x = 1 
>>> x = 'Hello' 
>>> print x 
Hello 

您只需再次重新定義同樣的方法,所以它使用最後一個定義。