您不能向
内置类型
添加属性,否则会出现如下错误:
TypeError: can't set attributes of built-in/extension type 'str'
你可以创建一个继承自
str
的
class
并添加这个方法:
class String(str):
def remove(self, index):
if isinstance(index, list):
for i in sorted(index, reverse=True):
self = self.remove(i)
return self
return String(self[0:index] + self[index + 1:])
s = String("hello")
print(s.remove([0, 1]))
如果您想要在原地进行更改,您需要创建一个新类型,例如:
class String:
def __init__(self, value):
self._str = value
def __getattr__(self, item):
""" delegate to str"""
return getattr(self._str, item)
def __getitem__(self, item):
""" support slicing"""
return String(self._str[item])
def remove(self, indexex):
indexes = indexex if isinstance(indexex, list) else [indexex]
for i in sorted(indexes, reverse=True):
self._str = self._str[0:i] + self._str[i + 1:]
return None
def __str__(self):
return str(self._str)
def __repr__(self):
return repr(self._str)
s = String("hello")
s.remove([0, 1])
print(s.upper())
print(s[:1])
print(list(x for x in s))
但仍然缺少其他类似于真实str
类的魔法方法,例如__add__, __mult__,......
如果您想要一个像str
一样的类,但具有可以更改实例本身的remove
方法,则需要创建自己的可变类型,str
是 原始不可变类型,self = self.remove(i)
不会真正更改变量,因为它只是将self
参数的引用更改为另一个object
,但引用s
仍指向由String("hello")
创建的相同对象。
i.remove([0, 1]) print(i)``` 这段代码无法正常工作。因为 `self = self.remove(i)` 没有修改变量。
- moe asalstr
是原始类型,你无法直接在原地修改它们。 - Charif DZ