Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为派生类添加新的构造函数值?_Python - Fatal编程技术网

Python 如何为派生类添加新的构造函数值?

Python 如何为派生类添加新的构造函数值?,python,Python,由于我是Python新手,所以我将遵循一个示例,以获得一个简单的TCP连接。下面的代码是服务器部分,但我想添加我自己的构造函数,它接受其他值,例如名称和可能的ID 服务器如下所示: #!/usr/bin/env python import SocketServer class MyTCPServer(SocketServer.ThreadingTCPServer): allow_reuse_address = True class MyTCPServerHandler(Socke

由于我是Python新手,所以我将遵循一个示例,以获得一个简单的TCP连接。下面的代码是服务器部分,但我想添加我自己的构造函数,它接受其他值,例如名称和可能的ID

服务器如下所示:

#!/usr/bin/env python

import SocketServer


class MyTCPServer(SocketServer.ThreadingTCPServer):
    allow_reuse_address = True

class MyTCPServerHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        while 1:
            try:
                data = self.request.recv(1024).strip()

            except Exception, e:
                print "Error getting message. ", e

            if data:
                print data




server = MyTCPServer(('192.168.1.103', 13373), MyTCPServerHandler)
server.serve_forever()
客户端代码为:

#!/usr/bin/env python

import socket
import json

hostname = '192.168.1.103'
port = 13373

try:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((hostname,port))

except Exception, e:
    print "Error, could not open socket: ", e

sock.send("HI")
在我的服务器中,我试图添加一个
def\uuuu init\uuuu(self,name,id)
,但这似乎不起作用。当我创建新服务器时

server = MyTCPServer(('192.168.1.103', 13373), MyTCPServerHandler)
我还要传一个名字和身份证

阅读SocketServer.ThreadingCpserver的文档时,会发现

__init__(self, server_address, RequestHandlerClass)
(Constructor)


Constructor. May be extended, do not override.

我认为这有助于你理解这个概念

class A(object):
    def __init__(self):
        print "entering A"
        super(A, self).__init__()
        print "leaving A"

class B(object):
    def __init__(self):
        print "entering B"
        super(B, self).__init__()
        print "leaving B"

class C(A,B):
    def __init__(self):
        print "entering c"
        A.__init__(self)
        B.__init__(self)
        print "leaving c"

重写初始值设定项有什么问题?@user791953我通常使用twisted,但是它看起来像是一个类编码问题,在回答之前,为什么不尝试创建自己的构造函数并从父构造函数调用自己的构造函数constructor@IgnacioVazquez-Abrams如果我重写初始化器,预期的参数将发生更改和错误。我试图创建一个空白的初始值设定项,但是它会抱怨给它传递了3个参数(元组和处理程序),而不是init所要求的数量。你必须遵守,但没有什么可以阻止你重写它。我想我需要做的是重写构造函数,但根据这一点,我可能不被允许重写?