2012-04-16 28 views
1

私はthreading.Threadとbdb.Bdbの両方を継承しています。 Threadはstart関数が呼び出すためのrun関数が必要で、私はBdb.run関数を使用する必要があります。私はself.runで実行できないので、Bdbの実行機能をどのように参照しますか?私はスーパーを試みたが、私は明らかにその権利を使用していない、私は得るTypeError:classobjではなく、型でなければならない。継承したクラス関数の参照

import sys 
import os 
import multiprocessing 
import threading 
import bdb 

from bdb import Bdb 
from threading import Thread 

from el_tree_o import ElTreeO, _RUNNING, _PAUSED, _WAITING 
from pysignal import Signal 

class CommandExec(Thread, Bdb): 
    ''' 
    Command Exec is an implementation of the Bdb python class with is a base 
    debugger. This will give the user the ability to pause scripts when needed 
    and see script progress through line numbers. Useful for command and 
    control scripts. 
    ''' 

    def __init__(self, mainFile, skip=None): 
     Bdb.__init__(self,skip=skip) 
     Thread.__init__(self) 

     # need to define botframe to protect against an error 
     # generated in bdb.py when set_quit is called before 
     # self.botframe is defined 
     self.botframe = None 

     # self.even is used to pause execution 
     self.event = threading.Event() 

     # used so I know when to start debugging 
     self.mainFile = mainFile 
     self.start_debug = 0 

     # used to run a file 
     self.statement = "" 

    def run(self): 
     self.event.clear() 
     self.set_step() 
     super(bdb.Bdb,self).run(self.statement) 
+0

'CommandExec'がスレッド*と*データベースであることは間違いありませんか?おそらくそれはデータベースを持っているかもしれませんか? – SingleNegationElimination

+0

superを使用するには、その行を 'super(CommandExec、self).run(self.statement)'に変更します。 Python 3では、 'super()。run(self.statement)'です。あなたはBdbのスーパークラスではなく、CommandExecのスーパークラスを取得しています。 :) – Darthfett

答えて

4

あなたは22行にBDBの__init__メソッドを呼び出したのと同じように、あなたはその実行方法呼び出すことができます。

Bdb.run(self, self.statement) 

superをあなたは次を起動する必要がある親クラスがわからない場合にのみ有効ですPythonの継承機構があなたのためにそれを理解できるようにしたいとします。ここでは、どの機能を呼び出すかを正確に知っていますので、Bdb.runと呼んでください。

+0

返信ありがとう...私はそれを試してみた:TypeError:バインドされていないメソッドのrun()は最初の引数として(代わりにstrのインスタンスを得た)Bdbインスタンスで呼び出されなければならない...任意のアイデア – user1313404

+1

@ user1313404:私は使用しました:Bdb.run(self、self.statement) –

+0

Bdbはベース・デバッガーであり、バークレー・データベースではありません...まだ質問は有効です。私は議論として自分自身を逃した..私の悪い、私は最初の引数として自己を追加し、それは正常に働いた...あなたの助けに感謝。 – user1313404