¿Cómo agrego un método de instancia a una clase usando una metaclase (sí, necesito usar una metaclase)? El siguiente tipo de obras, pero el func_name seguirán siendo "foo":Cómo agregar el método usando la metaclase
def bar(self):
print "bar"
class MetaFoo(type):
def __new__(cls, name, bases, dict):
dict["foobar"] = bar
return type(name, bases, dict)
class Foo(object):
__metaclass__ = MetaFoo
>>> f = Foo()
>>> f.foobar()
bar
>>> f.foobar.func_name
'bar'
Mi problema es que algunos código de la biblioteca en realidad utiliza el func_name y más tarde no puede encontrar el método de 'barra' de la instancia de Foo. Que podía hacer:
dict["foobar"] = types.FunctionType(bar.func_code, {}, "foobar")
También hay types.MethodType, pero necesito una instancia que does'nt existe todavía utilizar eso. ¿Me estoy perdiendo algo aquí?
Por qué estás tratando de cambiar el nombre del método? no dict [bar.func_name] = bar logra lo que quieres? –
Buena pregunta ... Originalmente estaba creando nombres de métodos basados en los atributos definidos en el dict, pero me doy cuenta de que esto no tiene sentido si las implementaciones de los métodos son idénticas. –