2010-09-13 5 views
5

Mam następujący fragment kodu, w którym staram się zastąpić metodę:Python dziwaczne klasa Problem

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

Jednakże gdy uruchomię go uzyskać TypeError wyjątek:

super() argument 1 must be type, not classobj 

Jaki jest problem?

Odpowiedz

7

Queue.PriorityQueue nie jest klasą w nowym stylu i superonly works with new-style classes. Zamiast tego należy użyć

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

.

+0

Idealny. Wielkie dzięki! – yassin

+2

w rzeczywistości, będziesz musiał również jawnie przekazać 'self': Queue.PriorityQueue.put (self, (item.priority, item)) –

+0

@Ivo: Yes; Dziękuję za poprawienie mnie! – unutbu