从子类方法更改或覆盖 str

Change or override str from subclass method

我在继承 class 中覆盖 str 时遇到问题。有没有办法做类似的事情?

class Sentence(str):
        
    def input(self, msg):
        """Extend allow to hold one changing object for various strings."""
        self = Sentence(input(msg))

    def simplify(self):
        self = self.lower()
        self.strip()

我想更改包含在 class 中的我的字符串以用于各种用途。有办法做到这一点吗?因为我从堆栈中尝试了很多东西,没有人帮助我。

有一个解释我想做什么:

在init中,我初始化了Sentence class:

self.sentence = Sentence("") 

Mainloop,用户可以在其中更改句子:

self.sentence.input("Your input:")

之后我想为算法简化字符串:

self.sentence.simplify()

就是这样,之后我想像字符串一样使用self.sentence。


但是在这两种方法中:

    def input(self, msg):
        """Extend allow to hold one changing object for various strings."""
        self = Sentence(input(msg))

    def simplify(self):
        self = self.lower()
        self.strip()

字符串未更改。

由于 Python 等优化语言对字符串执行(即它们是不可变的,因此可以重复使用相同的字符串)我认为从 str 继承不是一个好习惯,相反,你可以写一个 class 来包装字符串:

class Sentence:
    def __init__(self, msg: str):
        self.msg = msg

    def simplify(self):
        self.msg = self.msg.lower().strip()

例如,如果您过于频繁地更改字符串并且 运行 遇到性能问题,您可以通过这种方式改进您的实施。