Vincular dinamicamente métodos Python a uma instância vincula corretamente os nomes do método, mas não o método

Estou escrevendo um cliente para um grupo de serviços RESTful. O corpo das chamadas REST tem a mesma estrutura XML, dados os parâmetros. Há várias dúzias de chamadas e não implementarei todas elas. Como tal, quero torná-los fáceis de especificar e fáceis de usar. Os métodos REST são agrupados por funcionalidade em módulos separados e precisarão compartilhar o mesmo opener urllib2 para autenticação e cookies. Aqui está um exemplo de como um método é declarado:

@rest_method('POST', '/document')
def createDocument(id, title, body):
    # possibly some validation on the arguments
    pass

Tudo o que o desenvolvedor precisa se preocupar é a validação. O formato do XML (para POST e PUT) ou a URL (para GET e DELETE) e a desserialização da resposta são feitos nos métodos auxiliares. Os métodos decorados são coletados em um objeto cliente a partir do qual eles serão executados e processados. Por exemplo:

c = RESTClient('http://foo.com', username, password)
c.createDocument(1, 'title', 'body')

O código está pronto. O único problema é anexar os métodos decorados à classe do cliente. Embora todos os métodos decorados possam ser vistos na instância do cliente, todos eles compartilham a mesma definição, ou seja, o último a ser vinculado. Aqui está um breve exemplo que duplica o comportamento que estou vendo:

import types

class C(object): pass
def one(a): return a
def two(a, b): return a+b
def bracketit(t): return '(%s)' % t

c = C()

for m in (one, two):
    new_method = lambda self, *args, **kwargs:\
            bracketit(m(*args, **kwargs))
    method = types.MethodType(new_method, c, C)
    setattr(C, m.__name__, method)

print c.one 
print c.two
print c.two(1, 2)
print c.one(1)

Quando eu corro isso, recebo a seguinte saída:

<bound method C.<lambda> of <__main__.C object at 0x1003b0d90>>
<bound method C.<lambda> of <__main__.C object at 0x1003b0d90>>
(3)
Traceback (most recent call last):
  File "/tmp/test.py", line 19, in <module>
    print c.one(1)
  File "/tmp/test.py", line 12, in <lambda>
    bracketit(m(*args, **kwargs))
TypeError: two() takes exactly 2 arguments (1 given)

Não sei por que os dois métodos estão ligados da mesma maneira. Não consegui encontrar muita documentação sobre como instancemethod vincula métodos a instâncias. O que está acontecendo sob o capô, e como eu consertaria o código acima para que a segunda chamada imprime '(1)'?