После многого поиска я обнаружил, что есть несколько способов добавить связанный метод или методы несвязанного класса к существующим объектам экземпляра.Любой элегантный способ добавить метод к существующему объекту в python?
Такие способы включают подходы к принятому ниже коду.
import types
class A(object):
pass
def instance_func(self):
print 'hi'
def class_func(self):
print 'hi'
a = A()
# add bound methods to an instance using type.MethodType
a.instance_func = types.MethodType(instance_func, a) # using attribute
a.__dict__['instance_func'] = types.MethodType(instance_func, a) # using __dict__
# add bound methods to an class
A.instance_func = instance_func
A.__dict__['instance_func'] = instance_func
# add class methods to an class
A.class_func = classmethod(class_func)
A.__dict__['class_func'] = classmethod(class_func)
Что меня раздражает, набрав имя функции, instance_func
или class_func
дважды.
Есть ли простой способ добавить существующую функцию в класс или экземпляр, не набрав имя функции еще раз?
Например, A.add_function_as_bound_method(f)
будет намного более элегантным способом добавить существующую функцию к экземпляру или классу, так как функция уже имеет атрибут __name__
.