我对 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
基本上这会触发 handle()
方法一旦收到 TCP 请求,但我的问题比这简单得多。当我声明 TCPHandler
对象,我就是这样做的:
server = SocketServer.TCPServer('localhost', 9191), TCPHandler)
server.serve_forever()
然而,这似乎尝试调用 A
具有 4 个参数的 class' 构造函数(我认为 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
现在这个构造函数似乎被触发了,但是,RequestHandler.handle()
方法永远不会在到达 TCP 连接时调用。
为什么是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()
- 如果未添加 5 个参数构造函数,则会显示上述错误。
- 如果添加 5 个参数构造函数,则
I reached handle()!!
消息永远不会显示(因此,handle()
不会被触发)。
最佳答案
你的程序执行以下操作:
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
关于python - 为什么回调没有被触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25797523/