0

嗨,我正在开发一个 python 程序。我能够从班级的函数中检索数据,但无法向它们发送数据。

    class someClass:
        someList = []
        def sendMessage(message):
            someList.append(message)

    messageSender = someClass()

    listToSend = [] #loaded elswhere 

    someClass.sendMessage(listToSend[1])

当我继续运行它时,我收到此错误:

     TypeError: sendMessage() takes exactly 1 argument (2 given)

如果我只是使用someClass.someList = listToSend它就可以了,但这是针对大型程序的单元测试,所以我真的需要让 sendMessage 工作。知道有什么问题吗?

4

2 回答 2

3

在所有类方法中,您应该使方法的第一个参数self跟在其他参数之后:

class someClass:
    someList = []
    def sendMessage(self, message):
        someList.append(message)

messageSender = someClass()

listToSend = [] #loaded elswhere 

someClass.sendMessage(listToSend[1])
于 2013-06-28T01:19:32.050 回答
1

您忘记了 sendMessage 的函数声明中的 self 参数。
sendMessage(message)应该改为sendMessage(self, message)

类 someClass: someList = [] def sendMessage(self,message): someList.append(message)

messageSender = someClass()

listToSend = [] #loaded elswhere 

someClass.sendMessage(listToSend[1])

为什么它告诉我我传入了 2 个参数?

每当您调用类的方法时,例如:

dog.bark()

您将 self (它是 dog 变量)传递给方法,因此内部调用是dog.bark(self).

规则是:
方法调用中的可见参数 + 1 = 方法声明中的可见参数

于 2013-06-28T01:23:27.310 回答