Как добавить метод к классу / объекту Python во время прерывания сеанса отладки в Pycharm? - PullRequest
0 голосов
/ 08 января 2019

Необходимо добавить процедуру в моем class / object во время выполнения, чтобы выполнить некоторый код с использованием внутренних переменных и других методов закрытого класса (не могу предоставить более подробную информацию).

Интересно, как этого добиться, поэтому пришел к моему собственному решению (предоставлен в качестве текущего ответа). Есть ли лучший способ сделать то же самое?

1 Ответ

0 голосов
/ 08 января 2019

Спасибо @ user2357112. Работает следующий код (выполняется из диалогового окна отладчика-оценки, запущенного во время отладки):

class someClass(object):
    def __init__(self):
        self.element1 = '1'
    def pre_defined_method (self):
        print('in pre_defined_method - element1: {}'.format(self.element1))

def new_object_bound_method (self):
    print('in new_object_bound_method - element1: {}'.format(self.element1))

from  types import MethodType

obj = someClass()
setattr(obj, 'new_object_bound_method', 
            MethodType(new_object_bound_method, obj))
obj.pre_defined_method()
obj.new_object_bound_method()
obj.pre_defined_method()

try:
    obj2 = someClass()
    obj2.new_object_bound_method()
except Exception as e:
    print('"new_object_bound_method" is only bound to instance "obj" and not class "someClass"')
    print(e)

def new_class_bound_method(self):
    print('in new_class_bound_method - element1: {}'.format(self.element1))

someClass.new_class_bound_method = \
    MethodType(new_class_bound_method, None, someClass)

obj2.new_class_bound_method()

Вывод:

in pre_defined_method - element1: 1
in new_object_bound_method - element1: 1
in pre_defined_method - element1: 1
"new_object_bound_method" is only bound to instance "obj" and not class "someClass"
'someClass' object has no attribute 'new_object_bound_method'
in new_class_bound_method - element1: 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...