2011-11-15 31 views
0

我在python的套接字中遇到了一些問題。 我想寫一個關於sync_file的類,這些就是我寫的。python socket參數

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) 

我想我可以把插座對象作爲參數,但它顯示了一個錯誤message.It說,爭論的預期數量爲兩個,但我送三。 我不知道爲什麼會發生。

回答

1

你忘了該方法的self參數:

class sync: 
    def send_file(self, path, socket): 
     # ... 

方法調用,Python中自動將對象作爲第一個參數,所以你的功能得到三個參數,但只需要兩個。因此錯誤。

+0

感謝您的回答 – Oberon

1

這個問題與插座沒有任何關係。您將send_file定義爲實例方法;因此它總是會傳遞一個對實例本身的引用作爲第一個參數。

如果你想保持它作爲一個實例方法,簽名應該是:

def send_file(self, path, Socket): 

你也可以把它的靜態方法:

@staticmethod 
def send_file(path, Socket): 

這將使其可爲稱爲像實例方法(如您所做的那樣),但不會將該實例作爲參數傳遞。

但是,目前還不清楚爲什麼要創建sync類,因爲您似乎沒有將其用作封裝數據的對象,而只是使用一種不關心什麼的方法它是其中的成員。爲什麼不讓send_file成爲一個普通的功能?

+0

感謝您的回答。 – Oberon

+0

關於你的問題,那是因爲這只是我的代碼的一部分。我有其他方法,我沒有寫在問題中。 – Oberon