1
我要創建這樣一個服務器:不Python的HttpServer的實例化一個新的請求處理程序爲每個請求
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構造函數僅在調用服務器時被調用一次(我假設情況是這樣,因爲構造函數中的打印消息只是叫一次)。
是self.x不斷復位,爲每個請求的事實表明,處理程序類爲每個請求重新創建新的,但事實SomeClass的消息僅打印一次違背這一點。
有人能告訴我這是怎麼回事?
其因0是不可變的對象。第一個'self.x + = 1'獲取類級別的值,增加它,併爲結果創建一個對象級別的變量。未來'self.x + = 1'表達式獲取對象級變量。它與'self.x = MyHandler.x + 1'相同。 – tdelaney
是的,將self.x更改爲MyHandler.x確實修復了它,謝謝。但我恐怕我不明白爲什麼。我其實是Python的新手。在類定義中創建的變量是靜態的,即在所有實例之間共享,就像你說的那樣?將Java實例變量相當於像self.x – RTF
@tdelaney好,謝謝__init__聲明,我想我明白了 – RTF