Python 如何将我自己的方法添加到内置str类型?
此函数可以将字符串中的所有偶数字符提取到新字符串中:Python 如何将我自己的方法添加到内置str类型?,python,string,class,methods,Python,String,Class,Methods,此函数可以将字符串中的所有偶数字符提取到新字符串中: def change(s): result="" for index,item in enumerate(s): if(index%2 !=0): result=result+item return(result) 我怎样才能使它成为str类上的一个方法?当您在Python控制台中输入x.change()时,我将得到与change(x)相同的输出x.change()将获得'al-ol' dir(x)将
def change(s):
result=""
for index,item in enumerate(s):
if(index%2 !=0): result=result+item
return(result)
str
类上的一个方法?当您在Python控制台中输入x.change()
时,我将得到与change(x)
相同的输出x.change()
将获得'al-ol'
dir(x)
将在输出中获得'change'
,例如:
>>> x="hallo world"
>>> change(x)
'al ol'
你不能这样做。嗯,至少不是直接的。Python不允许向内置类型添加自定义方法/属性。这只是语言的法则 但是,您可以通过(继承自)
str
,创建自己的字符串类型:
['__add__', '__class__', ...omitted..., 'zfill', 'change']
>>> 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
上的所有功能:
['__add__', '__class__', ...omitted..., 'zfill', 'change']
>>> 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
添加了一个change
方法。不确定,但您可以创建自己的模块,使用不同于sting的名称,并将其保存在/usr/lib/python2.7/
或lib目录中。我将它们称为字符串中的奇数字符,因为Python使用基于0的索引。另外,我意识到这只是一个自定义方法的示例,但是FWIW您可以像您的change()
方法那样使用切片:“hallo world”[1::2]->“al ol”
,为澄清起见,创建的任何字符串文字永远不会是MyStr的实例。str类创建的任何字符串文字都将是str的实例,永远不会是MyStr的实例。>>>x1=str(“haha1”)>>>isinstance(x1,str)True>>>isinstance(x1,MyStr)False任何由MyStr类创建的字符串文字都将是str的实例或MyStr的实例。>>>x2=MyStr(“haha2”)>>>isinstance(x2,MyStr)True>>>isinstance(x2,str)True@it_is_a_literature-是的,这是预期的,因为MyStr
是str
的子类<代码>isinstance考虑继承。如果您需要直接测试,您可以随时执行类型(x)is MyStr
。但是请注意,很少需要这样做。