【问题标题】:Implementing a custom string method实现自定义字符串方法
【发布时间】:2011-05-30 00:21:28
【问题描述】:

如何将自定义方法添加到内置 python 数据类型?例如,我想实现this question 的解决方案之一,但可以按如下方式调用它:

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

那么我该如何定义一个自定义的.strip_inner() 字符串方法呢?

【问题讨论】:

标签: python


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您不能向内置类添加方法。但是使用函数有什么问题呢? strip_inner(s) 很好,而且是pythonic。

    如果您需要多态,那么只需使用if isinstance(obj, type_) 来确定要做什么,或者对于更可扩展的东西,使用通用函数包,例如PEAK-Rules

    【讨论】:

    • 第一段+1,第二段-1。至于为什么功能可能比方法更好,请参阅methods vs. functions
    【解决方案3】:

    你不能。而且你不需要。

    请参阅Extending builtin classes in python 了解替代解决方案。子类化是这里的方法。

    【讨论】:

    • 你是对的。我不想。我想继承我只是不记得它叫什么,所以我不能自己谷歌解决方案。谢谢。
    • 经过仔细检查,这并不是我想要做的(正如你所说,我不能完全做我想要的),但它肯定是可行的解决方案。
    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多