我对Python相当陌生,目前我正在运行一些示例来了解事情是如何运作的,但我陷入了其中一个步骤。
我有一个包含多个属性的类,以及一个__init__(self)
构造函数,如下所示:
class A:
# Some attributes here
a = None;
b = None;
...
def __init__(self):
# Do some stuff here
此外,我有另一个继承自2个类的类:上面的A
和SocketServer.BaseRequestHandler
(library)。
class TCPHandler(A, SocketServer.BaseRequestHandler):
def handle(self):
# Do some other stuff here
基本上这会在收到TCP请求后触发handle()
方法,但我的问题比这简单得多。当我声明一个TCPHandler
对象时,我这样做:
server = SocketServer.TCPServer('localhost', 9191), TCPHandler)
server.serve_forever()
然而,这似乎尝试调用A
类'带有4个参数的构造函数(我认为SocketServer.BaseRequestHandler
有):
TypeError: __init__() takes exactly 1 argument (4 given)
所以在A
中我添加了另一个带有4个参数的构造函数:
def __init__(self, a=None, b=None, c=None, d=None):
# Do some other stuff here
现在似乎触发了这个构造函数,但是,在到达TCP连接时,永远不会调用RequestHandler.handle()
方法。
为什么handle()
方法在这种情况下从未调用过?
----编辑----
这将是一个简短而完整的程序,可以说明我解释的行为:
import sys
import SocketServer
class A:
a = ''
b = ''
c = ''
def load_config(self):
a = 'a'
b = 'b'
c = 'c'
def __init__(self):
self.load_config()
def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True, debug=True):
self.load_config()
class TCPHandler(A, SocketServer.BaseRequestHandler):
def handle(self):
print "I reached handle()!!"
if __name__ == "__main__":
server = SocketServer.TCPServer(('localhost', 9999), TCPHandler)
server.serve_forever()
I reached handle()!!
消息(因此,handle()
未被触发)。答案 0 :(得分:1)
你的程序是这样做的:
def __init__(self, a=None, b=None, c=None, d=None):
# Do some other stuff here
应该这样做:
def __init__(self, a=None, b=None, c=None, d=None):
A.__init__(self)
SocketServer.BaseRequestHandler.__init__(self, a, b, c, d)
# Do some other stuff here