2012-02-12 69 views
11

我認爲這應該是一個簡單的問題來回答。TypeError:必須使用「Class name」實例作爲第一個參數調用unbound方法「method name」(代替str實例)

我有下類:

class GruposHandler(webapp.RequestHandler): 
    def get(self): 
     self.obtenerPagina() 

    def obtenerPagina(self, pOpcion = None, pMensajeInformacion = None): 
     opcion = pOpcion if pOpcion is not None else self.request.get('opcion') 
     usuario = obtenerUsuario() 
     rsGrupos = obtenerGruposAll() 
     listaOtrosGrupos = [] 
     listaGruposSuscriptos = [] 
     blah blah ........ 

class NuevoGrupoHandler(webapp.RequestHandler): 
    def post(self): 
     nombre = self.request.get('nombre') 
     descripcion = self.request.get('descripcion') 
     obj = Grupo.get_by_key_name(nombre) 
     if obj: 
      doRender(self, 'nuevo_grupo.html', {'mensaje_descripcion':'Ya existe un grupo con ese nombre.'}) 
     else: 
      grupo = model.Grupo(key_name = nombre, nombre=nombre, descripcion = descripcion); 
      grupo.put() 
      grupoHandler = GruposHandler 
      grupoHandler.obtenerPagina("gruposMios", 'Informacion: un nuevo grupo fue agregado.') 

但似乎方法obtenerPaginaGruposHandler沒有被正確調用。這是我得到的堆棧跟蹤:

TypeError: unbound method obtenerPagina() must be called with GruposHandler instance as first argument (got str instance instead) 

我在做什麼錯了?

預先感謝...

回答

23
grupoHandler = GruposHandler 

==>

grupoHandler = GruposHandler() 

UPDATE:

GruposHandler.obtenerPagina()方法接受3個參數:
selfpOpcion=NonepMensajeInformacion=None

因爲他們2個是可選的,你沒有得到:

TypeError: ... takes exactly 3 arguments (2 given) 

這樣調用它時:

GruposHandler.obtenerPagina("gruposMios", 'Informacion: ...') 

相反GruposHandler.obtenerPagina()解釋變量是這樣的:

self="gruposMios", pOpcion='Informacion: ...', pMensajeInformacion=None 

並提出:

TypeError: ... must be called with instance (got str instance instead) 

爲了擺脫異常,則需要從實例調用這個方法:

GruposHandler().obtenerPagina("gruposMios", 'Informacion: ...') 

self將被傳遞給obtenerPagina含蓄。

相關問題