实现自定义字符串方法
你怎么给Python内置的数据类型添加一个自定义的方法呢?比如,我想实现一个解决方案,来自于这个问题,但我希望能够像下面这样调用它:
>>> s = "A string with extra whitespace"
>>> print s.strip_inner()
>>> A string with extra whitespace
那么我该如何定义一个自定义的.strip_inner()
字符串方法呢?
3 个回答
1
你不能给内置类添加方法。但是,使用函数有什么问题呢?strip_inner(s)
这样用是完全可以的,也符合 Python 的风格。
如果你需要多态性(就是让不同类型的对象可以用同样的方法处理),那么可以用 if isinstance(obj, type_)
来判断该怎么做。或者,如果你想要更灵活的方式,可以使用一些通用的函数库,比如 PEAK-Rules。
2
像 str
这样的内置类是用 C 语言实现的,所以你不能直接去修改它们。不过,你可以做的是扩展 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
7
你不能这样做。而且你也不需要这样做。
可以看看 在Python中扩展内置类,那里有其他的解决办法。这里推荐使用子类化的方法。