0

ビューのデコレータがありSomeClass、このパラメータを使用して元のビュー関数の新しいインスタンスを作成し、呼び出します。

def decorator(orig_func):
    def inner_func(request, *args, **kwargs):
        api = SomeClass(request)
        return orig_func(request, api, *args, **kwargs)

問題は、内部のプロパティ(変数)がSomeClass多くのリクエストにわたって永続的であるように見えることです。たとえば、view_one実行されると、apu(SomeClass)クラス内にいくつかのプロパティが設定されます。これらのプロパティへの2番目のリクエストでview_twoは、最初のリクエストの値が引き続き設定されます。どうすればこれを回避できますか?簡単な解決策が必要です。


これがSomeClassです:

class SomeClass:
    some_variable = None

    def __init__(self,value):
        #self.some_variable = None

    def setVariable(self,value):
        self.some_variable = value

    def getVariable(self):
        return self.some_variable

私の問題は、リクエストが実行され、コメントされた行がコメント化されたときに、some_variableが必要ではなかったということでしNoneた-それは前のリクエスト中に設定された値を持っていました。そこで、変数を「クリア」するためにこのコメント行を作成しました。

今私は質問があります-これは安全ですか?別のリクエストが実行されている間に1つのリクエストがこの変数をクリアし、この別のリクエストでNoneにオーバーライドされる可能性はありますか?

4

1 に答える 1

1

以下は、必要な正しいクラス定義です。

class SomeClass:
    def __init__(self,value):
        self.some_variable = value

    def setVariable(self,value):
        self.some_variable = value

    def getVariable(self):
        return self.some_variable

instanceこれにより、オブジェクトではなく属性が設定されclassます。

>>> a = SomeClass(5)
>>> a.some_variable # Just as expected
5
>>> b = SomeClass(10)
>>> b.some_variable # This is its own variable
10
>>> b.some_variable = 20 # This won't change 'a'
>>> a.some_variable # Hasn't changed
5

また、getterやsetterを必要とせずに実行できるため、Pythonを作成するときに、多くの場合、必要gettersとしないことに注意する必要があります。settersinstance.some_variable = 5

于 2013-01-31T12:04:52.917 に答える