Python 可变str类扩展
为了执行以下操作,我编写了类str(内置)的以下扩展:假设我拥有字符串Python 可变str类扩展,python,python-3.x,string,overriding,Python,Python 3.x,String,Overriding,为了执行以下操作,我编写了类str(内置)的以下扩展:假设我拥有字符串“Ciao”,通过执行“Ciao”-“a”,我希望得到字符串“Cio”。下面是执行此操作的代码,它运行良好: class my_str(str): def __sub__(self, other): p = list(other) l = "" for el in self: if (el in p) == False: l +
“Ciao”
,通过执行“Ciao”-“a”
,我希望得到字符串“Cio”
。下面是执行此操作的代码,它运行良好:
class my_str(str):
def __sub__(self, other):
p = list(other)
l = ""
for el in self:
if (el in p) == False:
l += el
return my_str(l)
if __name__ == "__main__":
s = my_str("Ciao")
p = my_str("a")
t = s - p
print(t) # 'Cio'
print(s) # 'Ciao'
现在,假设我希望函数\uuuu sub\uuu
直接更新对象s
,这样当我在执行s-p
后键入print(s)
时,输出将是“Cio”。如何修改类my_str
?您可以使用
from collections import UserString
class Test(UserString):
def __add__(self, other):
self.data = self.data + other
UserString
类用于对内置字符串进行子类化,并将实际内容作为self.data
字段提供给您。问题是字符串是不可变的,您必须创建一个类mut_str
,该类具有my_str
属性,然后更改该属性-我认为。要么是这样,要么是对str
内部进行了一些重大修改。有趣的问题。这在Python级别是不可能的-字符串是不可变的,所以所有更改它们的操作都会返回新字符串。我认为,使用ctypes或cffi调用PythoncAPI可以做到这一点,但这既麻烦又危险。基本上这是一个非常糟糕的主意。你为什么认为你需要这么做?也许有更好的方法来做你想做的事情。我只对一般的事情感兴趣,而不是解决具体的问题。例如,如果我想扩展classlist
的方法sort
,我该怎么做?我也有同样的问题吗?@Matteo no,列表是可变的,a=[1,3,2];a、 sort()
将毫无问题地变异a
。需要注意的是,为了充实该类,您需要使用一个好的名称,如MutableStr
,并添加一个\u repr\u
方法