Sie können nicht tun, was Sie fragen, weil Strings unveränderlich sind. Die Dokumentation sagt Ihnen, dass Sie wickeln die str
Klasse zu erstellen, d.h. eine Klasse mit einem Attribut, das der aktuelle Wert des "mutable string" ist. Dies existiert in der Standardbibliothek von Python 2.x als UserString.MutableString
(ist aber in Python 3 verschwunden); es ist aber ziemlich einfach zu schreiben:
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
Ein besserer Plan ist jedoch die Verwendung eines StringIO
. In der Tat können Sie der gewünschten Funktionalität ziemlich nahe kommen, indem Sie eine Unterklasse StringIO
(Beachten Sie, dass Sie die reine Python-Version und nicht die C-Version verwenden müssen, um dies zu tun, und dass es eine Klasse im alten Stil ist, so dass Sie nicht super
). Das ist übersichtlicher, schneller und alles in allem IMO eleganter.
>>> 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
Sie können überschreiben __repr__
wenn Sie möchten x
um noch mehr wie eine Zeichenkette auszusehen, aber das ist eine schlechte Praxis, denn wenn möglich __repr__
dient dazu, eine Beschreibung des Objekts in Python zurückzugeben.