【问题标题】:Can't pass a python list entry to a function无法将 python 列表条目传递给函数
【发布时间】:2013-06-25 16:45:18
【问题描述】:

您好,我正在开发一个 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 工作。知道有什么问题吗?

【问题讨论】:

标签: python list function typeerror


【解决方案1】:

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

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

messageSender = someClass()

listToSend = [] #loaded elswhere 

someClass.sendMessage(listToSend[1])

【讨论】:

    【解决方案2】:

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

    类 someClass: 一些列表 = [] def sendMessage(self,message): someList.append(消息)

    messageSender = someClass()
    
    listToSend = [] #loaded elswhere 
    
    someClass.sendMessage(listToSend[1])
    

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

    每当你调用一个类的方法时,例如:

    dog.bark()
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多