1

次のようなサーバーを作成しています。

server = HTTPServer(('', PORT_NUMBER), MyHandler)

...そしてハンドラ:

class MyHandler(BaseHTTPRequestHandler):
    x = 0
    some_object = SomeClass()

    def do_GET(self):
        print self.x
        self.x += 1
        # etc. but x is not used further

class SomeClass:
    def __init__(self):
        print "Initialising SomeClass"

ここで、get リクエストを行うたびに、self.x に対して出力される値は常に 0 です。ただし、サーバーが最初に起動されたときに SomeClass コンストラクターが呼び出されるのは 1 回だけです (出力メッセージがコンストラクターでは一度だけ呼び出されます)。

リクエストごとに self.x がリセットし続けるという事実は、ハンドラー クラスがリクエストごとに新しく再作成されることを示唆していますが、SomeClass メッセージが 1 回だけ出力されるという事実はこれと矛盾します。

誰かがここで何が起こっているのか教えてもらえますか?

4

1 に答える 1