Преобразование одной команды pdb в другую, но она не работает - PullRequest
0 голосов
/ 27 мая 2018

Нужна помощь, я пытаюсь добавить изменение функциональности команды c command в quit, эти изменения необходимы для дальнейшего создания новых команд.Я не понимаю, что я делаю не так, как эти две вещи разные. Первая работает нормально, а вторая нет, я просто меняю поведение

db = pdb.Pdb()
db.do_c = db.do_quit
no = 3
db.runcall(fun,no)

Но это не работает, в этомcase self.do_quit даже не вызывается.

class dbg(pdb.Pdb):
    def custom_quit(self,arg):
        self.do_quit
db = dbg()
no = 3
db.do_c = db.custom_quit
db.runcall(fun,no)

Я просто запускаю простую функцию fun

def fun(no):
    print("a")
    print("b")
    for i in range(0,no):
        print(i)
    return 'abc'

по команде c она ничего не делает.

1 Ответ

0 голосов
/ 27 мая 2018

Обычный способ расширить метод в классе - это использовать то же имя для метода (то есть переопределить его) при вызове super(), чтобы сохранить функциональность исходного метода:

Таким образом, вы можете изменить свойпользовательский метод для

class dbg(pdb.Pdb):
    def do_quit(self, arg):
        super().do_quit(arg)
        print('do something else')
        return(1)

и обезьяна исправляет его с помощью:

db.do_c = db.do_quit # do_quit as usual

Взгляните на pdb.py и найдите функцию do_quit, и вы поймете, что что-то сделаночто вы должны сделать, или как-то сохранить, в том числе return(1)

...