How do you add a custom method to a built-in python datatype? For example, I'd like to implement one of the solutions from this question but be able to call it as follows:
>>> s = "A string with extra whitespace"
>>> print s.strip_inner()
>>> A string with extra whitespace
So how would I define a custom .strip_inner() string method?
-
possible duplicate of Extending builtin classes in pythonuser395760– user3957602010年12月23日 14:46:47 +00:00Commented Dec 23, 2010 at 14:46
3 Answers 3
You can't. And you don't need to.
See Extending builtin classes in python for an alternative solution. Subclassing is the way to go here.
2 Comments
The built-in classes such as str are implemented in C, so you can't manipulate them. What you can do, instead, is extend the str class:
>>> 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
Comments
You can't add methods to built-in classes. But what's wrong with using functions? strip_inner(s) is just fine and pythonic.
If you need polymorphism, then just use if isinstance(obj, type_) to determine what to do, or for something more extensible, use a generic function package, like PEAK-Rules.