it_*_*ure 4 python string methods class
def change(s):
result=""
for index,item in enumerate(s):
if(index%2 !=0): result=result+item
return(result)
Run Code Online (Sandbox Code Playgroud)
此函数可以将字符串中的所有偶数字符提取到新字符串中:
>>> x="hallo world"
>>> change(x)
'al ol'
Run Code Online (Sandbox Code Playgroud)
如何将它变成str
课堂上的方法?当你x.change()
在Python控制台中输入 时,我会得到相同的输出change(x)
.x.change()
会得到的'al ol'
.
dir(x)
将得到'change'
输出,如:
['__add__', '__class__', ...omitted..., 'zfill', 'change']
Run Code Online (Sandbox Code Playgroud)你不能这样做.好吧,至少不是直接的.Python不允许您向内置类型添加自定义方法/属性.这只是一种语言规律.
但是,您可以通过子类化(继承自己)来创建自己的字符串类型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)
Run Code Online (Sandbox Code Playgroud)
演示:
>>> 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
>>>
Run Code Online (Sandbox Code Playgroud)
新MyStr
类str
在各方面都会像普通类一样运行.实际上,它具有以下所有功能str
:
>>> x = MyStr("hallo world")
>>> x.upper()
'HALLO WORLD'
>>> x.split()
['hallo', 'world']
>>>
Run Code Online (Sandbox Code Playgroud)
两者之间的唯一区别是MyStr
有一个额外的change
方法.
归档时间: |
|
查看次数: |
80 次 |
最近记录: |