我在python的socket中有一些问题。 我想写一个关于sync_file的类,这些是我写的。
import socket
class sync:
def send_file(path,Socket): #I would like to income two argument. First one is the file's path, and the second one is the socket object.
f = open(path,"rb");
line = f.read()
f.close()
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
a = sync()
a.sendfile(file,s)
我以为我可以发送socket对象作为参数,但是它显示了一条错误消息。它说期望参数的数量是两个,但是我发送了三个。 我想知道为什么会这样。
答案 0 :(得分:1)
您忘记了该方法的self
参数:
class sync:
def send_file(self, path, socket):
# ...
对于方法调用,Python会自动将对象作为第一个参数传递,因此您的函数会获得三个参数但只需要两个参数。因此错误。
答案 1 :(得分:1)
问题与套接字没有任何关系。您将send_file
定义为实例方法;因此,它将始终作为第一个参数传递给实例本身的引用。
如果要将其保留为实例方法,则签名应为:
def send_file(self, path, Socket):
您也可以将其设为静态方法:
@staticmethod
def send_file(path, Socket):
这将使它可以像实例方法一样被调用(正如你所做的那样),但不能将实例作为参数传递。
但是,目前还不清楚你为什么要创建sync
类,因为你似乎没有将它用作封装数据的对象,而仅仅是为了保持一个不包含数据的方法关心它是什么实例。为什么不将send_file
作为普通函数?