1

threading.Thread と bdb.Bdb の両方から継承しています。スレッドでは、start 関数を呼び出すために run 関数が必要であり、Bdb.run 関数を使用する必要があります。self.run ではできないので、Bdb の run 関数を参照するにはどうすればよいですか? 私はスーパーを試しましたが、どうやらその権利を使用していないようで、TypeError: must be type, not 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)
4

1 に答える 1

4

22行目でBdbの__init__メソッドを呼び出したのと同じように、そのrunメソッドを呼び出すことができます。

Bdb.run(self, self.statement)

super次に呼び出す必要のある親クラスがわからず、Pythonの継承機構にそれを認識させたい場合にのみ役立ちます。ここでは、呼び出したい関数が正確にわかっているBdb.runので、それを呼び出すだけです。

于 2012-04-16T18:38:28.693 に答える