python socket参数

时间:2011-11-15 12:03:22

标签: python sockets python-3.x

我在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对象作为参数,但是它显示了一条错误消息。它说期望参数的数量是两个,但是我发送了三个。 我想知道为什么会这样。

2 个答案:

答案 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作为普通函数?