2010-09-13 16 views
5

Tengo el siguiente fragmento de código donde trato de reemplazar un método:Python problema extraña clase

import Queue 
class PriorityQueue(Queue.PriorityQueue): 
    def put(self, item): 
     super(PriorityQueue, self).put((item.priority, item)) 

Sin embargo, cuando lo funciono yo conseguir TypeError excepción:

super() argument 1 must be type, not classobj 

¿Cuál es el ¿problema?

Respuesta

7

Queue.PriorityQueue no es una clase de nuevo estilo, y superonly works with new-style classes. Debe utilizar

import Queue 
class PriorityQueue(Queue.PriorityQueue): 
    def put(self, item): 
     Queue.PriorityQueue.put(self,(item.priority, item)) 

en su lugar.

+0

Perfecto. ¡Muchas gracias! – yassin

+2

en realidad, también deberá pasar 'self' explícitamente: Queue.PriorityQueue.put (self, (item.priority, item)) –

+0

@Ivo: Yes; ¡gracias por la corrección! – unutbu