【问题标题】:TypeError: chunkIt() takes 2 positional arguments but 3 were given [duplicate]TypeError:chunkIt() 采用 2 个位置参数,但给出了 3 个 [重复]
【发布时间】:2018-12-06 20:53:08
【问题描述】:

当我尝试在此类 Game 中运行 self.chunkIt 时,我收到此错误:

Traceback (most recent call last):
  File "C:\Users\Araújo\Desktop\hq_player.py", line 128, in <module>
    g.new_question([1,2])
  File "C:\Users\Araújo\Desktop\hq_player.py", line 84, in new_question
    print(self.chunkIt(['1','2'],2))
TypeError: chunkIt() takes 2 positional arguments but 3 were given

如果尝试在控制台中单独运行它,它工作得很好。 为什么它传递 3 个参数? 类游戏: def init(self,number_questions,devices): self.number_questions = number_questions self.devices = 设备 self.question = 0

     def new_question(self,options):
         print(self.chunkIt(['1','2'],2))

      def chunkIt(seq, num):  
        avg = len(seq) / float(num)
        out = []
        last = 0.0

        while last < len(seq):
            out.append(seq[int(last):int(last + avg)])
            last += avg
        return out

【问题讨论】:

  • self 是第三个参数,因为你是如何称呼它的。您应该将 self 参数添加到 chunkIt
  • 如果chunkIt 真的不需要self,您可以将其设为@staticmethod,或者,可能更好的是,将其设为顶级函数而不是方法。但是如果chunkIt 可能在概念上对self 有一些用处,即使您当前的实现不使用它,添加self 参数并将其用作普通参数更有意义方法。

标签: python class console


【解决方案1】:

self 是第三个参数,因为我假设这些方法在给定 new_question 调用 self 的类中。

  def chunkIt(self, seq, num):  
    avg = len(seq) / float(num)
    out = []
    last = 0.0

    while last < len(seq):
        out.append(seq[int(last):int(last + avg)])
        last += avg
    return out

不管你是否定义它,除非你指定一个方法为静态的,它总是将self传递给该方法。因此,通过调用 print(self.chunkIt(['1','2'],2)) 它实际上是作为 print(self.chunkIt(self, ['1','2'],2))

【讨论】:

    【解决方案2】:

    您忘记将self 添加到chunkIt 方法:

     def new_question(self,options):
         print(self.chunkIt(['1','2'],2))
    
     def chunkIt(self, seq, num):  
         avg = len(seq) / float(num)
         out = []
         last = 0.0
    
         while last < len(seq):
             out.append(seq[int(last):int(last + avg)])
             last += avg
         return out
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-28
      • 2020-05-20
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2021-05-02
      • 2017-10-26
      • 2018-12-29
      相关资源
      最近更新 更多