Python奇怪的类问题

yas*_*sin 5 python overriding

我有以下代码,我尝试覆盖一个方法:

import Queue
class PriorityQueue(Queue.PriorityQueue):
    def put(self, item):
        super(PriorityQueue, self).put((item.priority, item))
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我得到TypeError异常:

super() argument 1 must be type, not classobj
Run Code Online (Sandbox Code Playgroud)

问题是什么?

unu*_*tbu 7

Queue.PriorityQueue不是新式的类,super 只适用于新式类.你必须使用

import Queue
class PriorityQueue(Queue.PriorityQueue):
    def put(self, item):
        Queue.PriorityQueue.put(self,(item.priority, item))
Run Code Online (Sandbox Code Playgroud)

代替.

  • 实际上,你还需要明确地传递'self':Queue.PriorityQueue.put(self,(item.priority,item)) (2认同)