Frage

ich eine Zeichenfolge mit einem zusätzlichen Attribut wollen, sagen wir mal, ob es in rot oder grün drucken.

Subclassing (str) nicht funktioniert, wie es unveränderlich ist. Ich sehe den Wert, aber es kann lästig sein.

können mehrere inheritence Hilfe? Früher habe ich das nie.

Vererben nur Objekt und mit self.value = str bedeutet, dass ich alle String-ness-Nachrichten implementieren (wie Streifen) selbst.

Oder gibt es eine Möglichkeit, sie zu übermitteln, wie Rubys missing_method?

Ich denke, einen Klasse-Level-Wörterbuch von Beispiel indiziert mit der Farbe zu speichern, könnte funktionieren. Zu hässlich?

War es hilfreich?

Lösung

str kann vererbt werden, wenn Sie eine sehr alte Python-Version verwenden, zum Beispiel:

>>> class A(str):
...    def __new__(cls, color, *args, **kwargs):
...        newobj = str.__new__(cls, *args, **kwargs)
...        newobj.color = color
...        return newobj
>>> a = A("#fff", "horse")
>>> a.color
'#fff'
>>> a
'horse'
>>> a.startswith("h")
True

Andere Tipps

Vielleicht eine benutzerdefinierte Klasse, die enthält ein String wäre ein besserer Ansatz sein. Brauchen Sie wirklich alle String-Methoden bis hin zu dem zugrunde liegenden Zeichenfolge zu übergeben? Warum nicht aussetzen die Zeichenfolge über eine Eigenschaft und die Verbraucher der Klasse zu tun, was immer sie es wünschen?

import UserString
class mystr(UserString.MutableString):
   ...

Es ist im Allgemeinen unveränderlich strings & Subklassen besten davon zu verwenden, aber wenn Sie einen veränderbaren einen brauchen das ist der einfachste Weg, es zu bekommen.

Sie müssen alle Methoden der Schnur, Schnur so erweitern und Ihre persönlichen Details hinzuzufügen. Was also, wenn String ist unveränderlich? So stellen Sie Ihre Klasse unveränderlich, auch. Dann sind Sie neue Objekte zu schaffen sowieso so dass Sie nicht versehentlich mess up denken, dass es ein veränderliches Objekt.

Oder, wenn Python eine, eine veränderliche Variante der Zeichenfolge erweitern. Ich bin nicht vertraut genug mit Python zu wissen, ob eine solche Struktur vorhanden ist.

Sie könnten versuchen, mit Hilfe des stringlike Modul in PyPI . Hier ist ein Beispiel .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top