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