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 构造函数仅在服务器首次启动时被调用一次(我假设是这种情况,因为打印消息在构造函数中只调用一次)。

self.x 为每个请求不断重置的事实表明处理程序类为每个请求重新创建新的,但 SomeClass 消息仅打印一次的事实与此相矛盾。

有人能告诉我这里发生了什么吗?

4

1 回答 1

2

这并不矛盾。因为您SomeClass()在类定义中调用(而不是__init__),所以在定义类时调用它,而不是在实例化时调用。

self.x += 1调用时发生的情况self.x是,从类级别读取值,但随后在实例级别进行分配,因此x创建了一个特定于实例的新值。

您可以尝试将其从self.xto更改为MyHandler.x,看看会发生什么。

于 2013-08-21T18:20:42.547 回答