从子类方法更改或覆盖str

时间:2019-01-24 13:49:05

标签: python python-3.x string inheritance subclass

我在继承的类中重写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()

我想更改该类中包含的地雷字符串,以用于各种用途。有办法吗?因为我从堆栈中尝试了很多东西,没有人帮助我。

@编辑:

有一个解释我想做什么: 在初始化中,我初始化Sentence类:

self.sentence = Sentence("") 

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

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

之后,我想简化alghoritm的字符串:

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()

字符串未更改。

1 个答案:

答案 0 :(得分:3)

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

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

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

例如,如果您过于频繁地更改字符串而遇到性能问题,则可以通过这种方式来改进实现。