你不能做你所要求的,因为字符串是不可变的。文档告诉你包装类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 中返回对象的描述。