2011-11-15 12 views
0

私はPythonのソケットにいくつか問題があります。 私はsync_fileに関するクラスを作成したいと思います。これらは私が書いたものです。pythonソケットの引数

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は、引数の期待数が2であるが、私は3を送ると言ったエラーを示します。 なぜそれが起こったのだろうか。あなたは、メソッドの引数self忘れた

答えて

1

:メソッド呼び出しのために

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

を、Pythonは自動的に最初の引数としてオブジェクトを渡すので、あなたの関数は3つの引数を取得しますが、2つだけを期待しています。したがって、エラー。

+0

回答ありがとうございました – Oberon

1

問題は、ソケットとはまったく関係ありません。あなたはインスタンスメソッドとしてsend_fileを定義しています。そのため、常にインスタンス自体への参照が最初の引数として渡されます。

あなたはインスタンスメソッドとしてそれを維持したい場合は、署名は次のようになります。

def send_file(self, path, Socket): 

また、それ静的メソッド作ることができます:

@staticmethod 
def send_file(path, Socket): 

ことは、それが利用できるようになります(あなたがやっているように)インスタンスメソッドのように呼ばれますが、インスタンスをパラメータとして渡すことはありません。

syncクラスを作成する理由はわかりませんが、データをカプセル化するオブジェクトとして使用しているようには見えないため、何かを気にしない単一のメソッドを保持するだけなのでインスタンスそれはのメンバーです。単にsend_fileを普通の機能にしないのはなぜですか?

+0

お返事ありがとうございます。 – Oberon

+0

あなたの質問については、これは私のコードの一部にすぎないので、私は質問にそれを書かなかった他の方法があります。 – Oberon