Implementando un método de cadena personalizado

¿Cómo se agrega un método personalizado a un tipo de datos Python incorporado? Por ejemplo, me gustaría implementar una de las soluciones de esta pregunta, pero poder llamarlo de la siguiente manera:

>>> s = "A string with extra whitespace" >>> print s.strip_inner() >>> A string with extra whitespace 

Entonces, ¿cómo definiría un método de cadena .strip_inner() personalizado?

Usted no puede Y no es necesario.

Consulte Extender las clases incorporadas en python para obtener una solución alternativa. Subclasificar es el camino a seguir aquí.

Las clases integradas como str se implementan en C, por lo que no se pueden manipular. Lo que puedes hacer, en cambio, es extender la clase str :

 >>> class my_str(str): ... def strip_inner(self): ... return re.sub(r'\s{2,}', ' ', s) ... >>> s = my_str("A string with extra whitespace") >>> print s.strip_inner() A string with extra whitespace 

No se pueden agregar métodos a las clases incorporadas. Pero, ¿qué hay de malo en usar funciones? strip_inner(s) es simplemente fino y pythonic.

Si necesita polymorphism, solo use if isinstance(obj, type_) para determinar qué hacer, o para algo más extensible, use un paquete de funciones genérico, como PEAK-Rules .