文字列は不変であるため、求めていることを実行できません。ドキュメントでは、クラスをラップするように指示されています。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
(これを行うには、C バージョンではなく純粋な Python バージョンを使用する必要があることに注意してください。これは古いスタイルのクラスであるため、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__
たい場合はオーバーライドできますが、可能であればオブジェクトの Python での説明を返すことを意図しているため、これは悪い習慣です。x
__repr__