在可变字符串中重载 del 运算符 class python

Overloading the del operator in a mutable string class python

我很难编辑内置的 del 运算符并满足我的任务限制。

在我的 python class 中,我的教授希望我们从一个 class 开始,创建一个名为 Mutstr 的可变字符串。在包含字符串 "oogyboogy" 的 Mutstr 实例中,他希望我们在三个 del 命令中删除字符串 "oogyboogy".

中的 "gyb"

唉。如此糟糕的作业……无论如何。

我在下面有两个代码片段可以完成摆脱 "gyb"。

不幸的是,我的两个版本都依赖于一个 del 命令。我相信我的教授想要三个单独的调用来按索引删除这些每个索引。

遍历整个字符串评估每个索引以检查它是否是 "oogyboogy"

中间字符 'gyb' 的特定成员的最佳方法是什么

现在,当我 运行 这个时,这两个都有效:

>>> one = Mutstr('oogyboogy')
>>> del one[2]
>>> one.get()
'oooogy'

我认为这是正确答案。但是,我认为我的实现方式不符合他的问题约束:

class Mutstr():
    def __init__(self,st = ""):
          self.str = st

    def get(self):
          return self.str

    def __delitem__(self, index):
          self.str = self.str[:index] + self.str[index+3:]

我这里有另一个版本做同样的事情:

    def __delitem__(self, index):
      if 'g' in self.str:
          self.str = self.str[:index] + self.str[index+1:]
      if 'y' in self.str:
          self.str = self.str[:index] + self.str[index+1:]
      if 'b' in self.str:
          self.str = self.str[:index] + self.str[index+1:]

按照我阅读作业的方式,您的教授可能正在寻找类似的内容:

class Mutstr(object):
    def __init__(self, st=""):
          self.st = st

    def get(self):
          return self.st

    def __delitem__(self, index):
          self.st = self.st[:index] + self.st[index+1:]

one = Mutstr('oogyboogy')
del one[4]
del one[3]
del one[2]
print one.get()

你的教授几乎肯定想要这些语义:

>>> one = Mutstr('oogyboogy')
>>> del one[2] # deletes g
>>> del one[2] # deletes y
>>> del one[2] # deletes b
>>> one.get()
'oooogy'

所以,您应该只删除 __delitem__ 中的一个字符。不要在 __delitem__ 函数中对字符值进行硬编码,那样品味很差。