Python 可变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 +

为了执行以下操作,我编写了类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 += 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可以做到这一点,但这既麻烦又危险。基本上这是一个非常糟糕的主意。你为什么认为你需要这么做?也许有更好的方法来做你想做的事情。我只对一般的事情感兴趣,而不是解决具体的问题。例如,如果我想扩展class
list
的方法
sort
,我该怎么做?我也有同样的问题吗?@Matteo no,列表是可变的,
a=[1,3,2];a、 sort()
将毫无问题地变异
a
。需要注意的是,为了充实该类,您需要使用一个好的名称,如
MutableStr
,并添加一个
\u repr\u
方法