Experiment: MutableString

In Python sind string-Objekte "immutable" - unveränderlich. Dies hat viele Vorteile, beispielsweise erfordern dict-Objekte, das die keys immutable sind. 

Im Rahmen einer Stackoverflow-Antwort habe ich ein simples Beispiel einer MutableString-Klasse entworfen:

class MutableString(object):
    def __init__(self, s):
        self._characters = [c for c in s]

    def __str__(self):
        return "".join(self._characters)

    def __repr__(self):
        return "MutableString(\"%s\")" % str(self)

    def __getattr__(self, name):
        return str(self).__getattribute__(name)

    def __len__(self):
        return len(self._characters)

    def __getitem__(self, index):
        return self._characters[index]

    def __setitem__(self, index, value):
        self._characters[index] = value

    def __getslice__(self, start, end=-1, stride=1):
        return str(self)[start:end:stride]


if __name__ == "__main__":
    m = MutableString("Hello")
    print m
    print len(m)
    print m.find("o")
    print m.find("x")
    print m.replace("e", "a") #translate to german ;-)
    print m
    print m[3]
    m[1] = "a"
    print m
    print m[:]

    copy1 = m
    copy2 = m[:]
    print m, copy1, copy2
    m[1] = "X"
    print m, copy1, copy2

Die einzelnen Zeichen werden als Einträge einer Liste gespeichert - durch Implementierung entsprechender Methoden fühlen sich Objekte dieser Klasse aber fast wie normale Strings an.

Diese Klasse hat keine praktische Relevanz - sie ist zu rein didaktischen Zwecken enstanden, in erster Linie für mich.

Der ursprüngliche Thread ist hier zu finden: stackoverflow.com/questions/14433759/python-why-would-you-use-over