【问题标题】:TypeError: unbound method setSize() must be called with Page instance as first argument (got classobj instance instead)TypeError:必须以 Page 实例作为第一个参数调用未绑定的方法 setSize()(改为获取 classobj 实例)
【发布时间】:2018-05-10 03:02:54
【问题描述】:

当我运行下面提供的代码时,我收到以下错误:

TypeError: unbound 方法 setSize() 必须以 Page 实例作为第一个参数调用(取而代之的是 int 实例)

在我的 main 中,我调用了一个名为 Page 的类。变量 pageSize 是一个整数。

from Page import Page as Page
def main():
   #other code....

   Page.setSize(pageSize)

这是我的Page类:

class Page:
    def __init__(self, frame):
    self.frameId = frame
    self.pageId = -1
    self.timeEvicted = 0
    self.timeLoaded = 0
    self.ifLoaded = False
    self.ownerProcess = 0
    self.referencedWords = []

def initalize(owner, pgId, refdWord, ifLoad):
    self.ownerProcess = owner
    self.pageId = pgId
    addRefdWord(refdWord)
    self.ifLoaded = ifLoad

def setSize(s):
    self.size = s

【问题讨论】:

    标签: python class init


    【解决方案1】:

    每个实例方法(有权访问self)都必须将self作为第一个参数:

    def initalize(self, owner, pgId, refdWord, ifLoad):
                  ^^^^^
    
    ...
    
    def setSize(self, s):
                ^^^^^
        self.size = s
    

    否则,self 未在函数体中定义。同样,Page.setSize(pageSize) 将不起作用,因为您没有类的实例。您需要在调用实例方法之前创建一个:

    page = Page()
    page.setSize(pageSize)
    

    现在,page.size == pageSize

    【讨论】:

      【解决方案2】:

      您首先必须实例化您的类的一个对象并调用该对象上的函数,才能使用self 您必须将setSize 定义为类方法才能在类上使用它

      class Page:
          @classmethod
          def setSize(cls,s):
              self.size = s
              //cls refers to the class itself
      

      【讨论】:

      • 我一直收到同样的错误,即使在使用 @classmethod 之后
      • 糟糕,试试@MarkJ。
      • 我需要导入任何东西才能使用它吗?
      • 对不起,最后一个@MarkJ
      • @MarkJ,不,您不需要导入任何与代码缩进有关的内容
      猜你喜欢
      • 2011-05-27
      • 2017-05-10
      • 1970-01-01
      • 2017-12-09
      • 2015-12-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多