【问题标题】:Change or override str from subclass method从子类方法更改或覆盖 str
【发布时间】:2019-01-24 13:49:04
【问题描述】:

我在继承类中覆盖 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()

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

@编辑:

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

self.sentence = Sentence("") 

主循环,用户可以在其中更改句子:

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

字符串没有改变。

【问题讨论】:

  • 这个问题可能会受益于对您正在尝试做的事情以及您的示例到底做错了什么的更全面的解释。
  • 在一个方法中赋值给self什么也做不了,你所做的只是改变一个局部变量,当方法返回时它会消失。

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


【解决方案1】:

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

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

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

如果您过于频繁地更改字符串并且遇到性能问题,这样您就可以改进您的实现。

【讨论】:

  • 好吧,我试图避免这种方式,但如果它只是一种正确的方式,那么这就是我的答案。谢谢你:)
猜你喜欢
  • 2021-11-16
  • 2017-11-11
  • 1970-01-01
  • 2015-01-19
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多