0

私はdjangoチュートリアルを行っていますが、views.pyに同じ名前の関数が2つあるとどうなるのでしょうか?

例えば:

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)

コードを実行すると、一番下の関数が呼び出されました。これはどのように作動しますか?

4

2 に答える 2

5

Pythonでは、メソッドと関数は任意の数の引数を取ることができます。これは、渡されるさまざまなタイプの引数をサポートするためにさまざまな関数「署名」を持つ必要性を否定します。これは、関数のオーバーロードの一般的なユースケースです。4.7.3を参照してください。Pythonドキュメントの任意の引数リスト。

2番目のメソッドが呼び出される理由は、同じ名前(および同じ引数リスト)でメソッド定義を定義するときに、メソッド定義を単に上書きするためです。Pythonの場合、これは次と同じです。

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

同じメソッドを再定義しただけなので、最後の定義が使用されます。

于 2012-06-20T05:58:20.797 に答える
1

私が誤解していない場合、viewメソッドを拡張またはオーバーライドする必要がある場合は、クラスを使用する必要があります...または「if」ステートメントを使用してください:)

https://docs.djangoproject.com/en/dev/topics/class-based-views/

あなたの例では、それはPythonの通常の動作です...左上からファイルを読み取ります..次に、ファイルをコンパイルして使用します...

于 2012-06-20T05:51:38.000 に答える