Comment ajouter une méthode d'instance à une classe en utilisant une métaclasse (oui, je dois utiliser une métaclasse)? Le genre suivant des travaux, mais le func_name seront toujours « foo »:Comment ajouter une méthode en utilisant la métaclasse
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'
Mon problème est que du code de bibliothèque utilise en fait la func_name et ne parvient plus tard à trouver la méthode du « bar » de l'instance Foo. Je pouvais faire:
dict["foobar"] = types.FunctionType(bar.func_code, {}, "foobar")
Il y a aussi types.MethodType, mais je besoin d'une instance qui does'nt existe encore utiliser. Est-ce que je manque quelque chose ici?
Pourquoi vous essayez de changer le nom de la méthode? does not dict [bar.func_name] = barre accomplir ce que vous voulez? –
Bonne question ... À l'origine, je créais des noms de méthodes basés sur des attributs définis dans le dict, mais je réalise que cela est inutile si les implémentations des méthodes sont identiques. –