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

时间:2015-03-25 09:00:15

标签: python string operator-overloading mutable

我很难编辑内置del运算符并满足我的赋值约束。

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

叹息。无论如何,这样的任务很糟糕......

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

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

最好的方法是通过评估每个索引的整个字符串来检查它是否是角色的特定成员' gyb'在" oogyboogy"

的中间

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

>>> 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:]

2 个答案:

答案 0 :(得分:0)

我正在阅读作业的方式,你的教授可能正在寻找类似的东西:

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

答案 1 :(得分:0)

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

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

所以,你应该只删除__delitem__中的一个字符。不要对__delitem__函数中的字符值进行硬编码,这只是一种不好的品味。