аргумент сокета Python - PullRequest
       7

аргумент сокета Python

0 голосов
/ 15 ноября 2011

У меня проблема с сокетом Python.Я хотел бы написать класс о 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)

Я думал, что могу отправить объект сокета в качестве аргумента, но он показывает сообщение об ошибке.аргумент два, но я посылаю три.Интересно, почему это произошло?

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Проблема не имеет ничего общего с сокетами. Вы определяете send_file как метод экземпляра; поэтому в качестве первого аргумента всегда будет передаваться ссылка на сам экземпляр.

Если вы хотите сохранить его как метод экземпляра, подпись должна быть:

def send_file(self, path, Socket):

Вы также можете сделать это статическим методом:

@staticmethod
def send_file(path, Socket):

, что сделает его доступным для вызова как метод экземпляра (как вы делаете), но не передает экземпляр в качестве параметра.

Однако неясно, зачем вы вообще создаете класс sync, так как вы, похоже, используете его не как объект для инкапсуляции данных, а просто для хранения одного метода, который не заботится о какой экземпляр он является членом. Почему бы просто не сделать send_file обычной функцией?

1 голос
/ 15 ноября 2011

Вы забыли аргумент self для метода:

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

Для вызовов методов Python автоматически передает объект в качестве первого аргумента, поэтому ваша функция получает три аргумента, но ожидает только два. Отсюда и ошибка.

...