Convertir el tipo de función incorporada al tipo de método (en Python 3)

Considere una función simple como

def increment(self):
    self.count += 1

que se ejecuta a través de Cython y se compila en un módulo de extensión. Supongamos que ahora me gustaría hacer de esta función un método en una clase. Por ejemplo:

class Counter:
    def __init__(self):
        self.count = 0

from compiled_extension import increment
Counter.increment = increment

Ahora esto no funcionará, ya que la convención de llamadas en el nivel C se romperá. Por ejemplo:

>>> c = Counter()
>>> c.increment()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: increment() takes exactly one argument (0 given)

Pero en Python 2, podemos convertir la función a un método independiente al hacer:

Counter.increment = types.MethodType(increment, None, Counter)

¿Cómo puedo lograr esto mismo en Python 3?

Una forma simple es usar una envoltura delgada:

from functools import wraps
def method_wraper(f):
    def wrapper(*args, **kwargs):
        return f(*args, **kwargs)
    return wraps(f)(wrapper)

Counter.increment = method_wrapper(increment)

¿Hay alguna forma más eficiente de hacerlo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta