Спасибо @ 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