通常,当您使用点分访问查找对象字典时,存储在对象字典中的函数不会自动变为绑定方法。
就是说,您可以使用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
希望这正是您需要的:-)