= Receita: Monkeypatching = Dica do próprio GuidoVanRossum para simplificar a tecnica do [[http://en.wikipedia.org/wiki/Monkey_patch|"Monkey Patch"]] (adicionar metodos numa classe já definida). Fonte: http://mail.python.org/pipermail/python-dev/2008-January/076194.html Nenhuma das técnicas permite fazer monkeypatching em tipos built-in ou qualquer outro definido em C. == Código == Primeiro, um decorator para adicionar um unico metodo a uma classe: {{{ #!python def monkeypatch_method(cls): def decorator(func): setattr(cls, func.__name__, func) return func return decorator }}} Segundo, uma "metaclasse" (ok, uma factory function que serve como metaclasse) para adicionar metodos (ou outros atributos quaisquer) para uma classe pre-existente, com uma conveniente definição de classe {{{ #!python def monkeypatch_class(name, bases, namespace): assert len(bases) == 1, "Exactly one base class required" base = bases[0] for name, value in namespace.iteritems(): if name != "__metaclass__": setattr(base, name, value) return base }}} == Exemplo de uso == Decorator: {{{ #!python from import @monkeypatch_method() def (self, args): return }}} Isso vai adicionar {{{}}} a {{{}}}. Metaclass: {{{ #!python from import class (): __metaclass__ = monkeypatch_class def (...): ... def (...): ... ... }}} Isso vai adicionar {{{}}} e {{{}}} a {{{}}}, e criar como um "apelido" para {{{}}}. Volta para CookBook. ---- EduardoDeOliveiraPadoan