你不能这样做,因为字符串是不可变的。该文档告诉你包装str
类;也就是说,要创建一个具有“可变字符串”当前值的属性的类。这存在于Python 2.x的标准库中,作为UserString.MutableString
(但在Python 3中消失了);但它很容易编写:
class MutableString(object):
def __init__(self, value):
self.value = value
def conc(self, value, delim=' '):
self.value = "{self.value}{delim}{value}".format(**locals())
def __str__(self):
return self.value
但是,更好的方案是使用StringIO
。实际上,通过继承StringIO
(注意,您需要使用纯Python版本而不是C版本来完成此操作,并且它是旧样式的类,因此您无法使用super
)。这是更整洁,更快,并且更加优雅的IMO。
>>> from StringIO import StringIO as sIO
>>> class DelimitedStringIO(sIO):
... def __init__(self, initial, *args, **kwargs):
... sIO.__init__(self, *args, **kwargs)
... self.write(initial)
...
... def conc(self, value, delim=" "):
... self.write(delim)
... self.write(value)
...
... def __str__(self):
... return self.getvalue()
...
>>> x = DelimitedStringIO("Hello")
>>> x.conc("Alice")
>>> x.conc("Bob", delim=", ")
>>> x.conc("Charlie", delim=", and ")
>>> print x
Hello Alice, Bob, and Charlie
您可以覆盖__repr__
,如果你想x
看起来更像一个字符串,但是这是不好的做法,因为在可能的情况__repr__
是为了在对象的Python中返回一个说明。
该文档告诉你_wrap_字符串类不是它的子类!也就是说,要做你想做的事情,你应该使用一个持有当前字符串值的属性来创建一个从`object`继承的类。 – katrielalex 2010-12-23 16:08:55
[用手拍打额头] D'oh!谢谢。谢谢。请将上面的评论作为答案(或将其添加到现有的答案中),以便我可以接受它。我想我错过了一些明显的东西。 – mwolfe02 2010-12-23 16:23:58