Ответ 1
Обычно функции, хранящиеся в словарях объектов, автоматически не превращаются в связанные методы, когда вы просматриваете их с помощью точечного доступа.
Тем не менее, вы можете использовать functools.partial, чтобы предварительно связать функцию и сохранить ее в словаре объектов, чтобы к ней можно было получить доступ, например метод:
>>> from functools import partial
>>> class Dog:
def __init__(self, name):
self.name = name
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> def bark(self): # normal function
print('Woof! %s is barking' % self.name)
>>> e.bark = partial(bark, e) # pre-bound and stored in the instance
>>> e.bark() # access like a normal method
Woof! Buddy is barking
Это несколько элегантный способ добавить метод к существующему объекту (без необходимости менять его класс и не влиять на другие существующие объекты).
Последующие действия для комментариев:
Вы можете использовать вспомогательную функцию для добавления предопределенной функции - это один шаг:
>>> def add_method(obj, func):
'Bind a function and store it in an object'
setattr(obj, func.__name__, partial(func, obj))
Используйте его следующим образом:
>>> add_method(e, bark)
>>> e.bark()
Woof! Fido is barking
Надеюсь, это именно то, что вам нужно: -)