Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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 __init__()得到一个意外的关键字参数';康涅';_Python_Multithreading_Class_Sockets_Init - Fatal编程技术网

Python __init__()得到一个意外的关键字参数';康涅';

Python __init__()得到一个意外的关键字参数';康涅';,python,multithreading,class,sockets,init,Python,Multithreading,Class,Sockets,Init,我在重写thread类的init方法时遇到问题。 我只需要它获取一个套接字,当我实例化thread对象时,它会传递给init方法。 thread类的代码为: class client_handle(threading.Thread): conne = socket.socket(socket.AF_INET, socket.SOCK_STREAM) def __init__(self, conne=None): threading.Thread.__init_

我在重写thread类的init方法时遇到问题。 我只需要它获取一个套接字,当我实例化thread对象时,它会传递给init方法。 thread类的代码为:

class client_handle(threading.Thread):

    conne = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def __init__(self, conne=None):
        threading.Thread.__init__(self, conne=conne)
创建客户端句柄对象时,我会写入:

socket_conn, addr = s.accept()
client_thread = client_handle(socket_conn)

我也在其他帖子中搜索过,但我无法解决我的问题。

Thread.\uuu init\uuu
没有名为
conne
的参数,因此必须将该值作为位置参数传递

def __init__(self, conne=None):
    threading.Thread.__init__(self, conne)
顺便说一句,class属性
client\u handle.conne
似乎没有任何用途;你也许可以摆脱它


更新:将套接字传递给
线程。uuu init_uuu
尤其明显是错误的,但这适用于任何试图“发明”参数名(如
conne
)的方法,该方法没有名为
conne

的参数,您需要手动将
conne
指定为实例的属性。将其作为参数传递给
线程。\uuuu init\uuuu
将不起作用(将设置为线程类的组参数)


不确定,但是
threading.Thread.\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoself,conne)
super()<代码>线程。线程。_init__
是对特定函数的引用
super()。\uuuu init\uuuu
是对
类型(self)
的MRO中
客户端句柄之后的任何类的
\uuuuuuu
方法的引用。但是,如果您正在创建
客户端\u handle
的实例,
threading.Thread
是MRO中的下一个类,因此它们是等效的。请参阅以获得更详细的解释。我按照您告诉我的方式编写了conne,而不是conne=conne,但现在它给了我一个错误:现在组参数必须是None,对吧;我忘了看
Thread.\uuuu init\uuu
想要什么作为参数。你认为线程与套接字有什么关系?@chepner谢谢你的详细解释:)谢谢你,它能工作。因此,这将创建Thread类中不存在的属性conne,对吗?@Rasta是的,它将用于这个新类。您继承自
线程
并重新定义
\uuuuu init\uuuuuu
,这将覆盖继承的
\uuuuuuuu init\uuuuuuu
,因此您必须像调用父类中的
\uuuuuu init\uuuuuuu()
。然后用新添加的属性扩展新的子类。
from threading import Thread

class ClientHandle(Thread):
    def __init__(self, conne=None):
        super().__init__() # Python 3
        self.conne = conne