如何将自己的方法添加到内置str类型?

时间:2015-01-09 05:10:17

标签: python string class methods

def change(s):
    result=""
    for index,item in enumerate(s):
        if(index%2 !=0): result=result+item
    return(result)

此函数可以将字符串中的所有偶数字符提取为新字符串:

>>> x="hallo world"
>>> change(x)
'al ol'
  1. 如何将其作为str类的方法?当您在Python控制台中输入x.change()时,我会得到与change(x)相同的输出。 x.change()将获得'al ol'

  2. dir(x)将在输出中获得'change',例如:

    ['__add__', '__class__', ...omitted..., 'zfill', 'change'] 
    

1 个答案:

答案 0 :(得分:5)

你不能这样做。好吧,至少不是直接的。 Python不允许您向内置类型添加自定义方法/属性。这只是一种语言规律。

然而,您可以通过subclassing(继承自{}} str创建自己的字符串类型:

class MyStr(str):
    def change(self): # 's' argument is replaced by 'self'
        result=""
        for index,item in enumerate(self): # Use 'self' here instead of 's'
            if(index%2 !=0): result=result+item
        return(result)

演示:

>>> class MyStr(str):
...     def change(self):
...         result=""
...         for index,item in enumerate(self):
...             if(index%2 !=0): result=result+item
...         return(result)
...
>>> x = MyStr("hallo world")
>>> x
'hallo world'
>>> x.change()
'al ol'
>>> 'change' in dir(x)
True
>>>

新的MyStr类在各方面都会像普通的str类一样运行。事实上,它具有str上的所有功能:

>>> x = MyStr("hallo world")
>>> x.upper()
'HALLO WORLD'
>>> x.split()
['hallo', 'world']
>>>

两者之间的唯一区别是MyStr添加了change方法。