Çok fazla arama yaptıktan sonra, varolan örnek nesnelere bir bağlı yöntem veya ilişkisiz sınıf yöntemleri eklemenin birkaç yolu olduğunu fark ettim.Python'da varolan bir nesneye yöntem eklemek için herhangi bir zarif yol var mı?
Bu tür yöntemler, aşağıdaki kodun yaklaşan yaklaşımlarını içerir. Beni rahatsız edici kılan
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)
iki kez işlevin adını, instance_func
veya class_func
yazarak vardır.
İşlev adını bir daha yazmadan bir işlev veya örneğe varolan bir işlevi eklemenin basit bir yolu var mı?
Örneğin, A.add_function_as_bound_method(f)
işlevi zaten __name__
niteliği sahip olduğundan örneğine veya sınıfa varolan işlev eklemek için uzak çok şık bir yol olacaktır.