6 Stimmen

Wie verleihe ich meiner Klasse Stringness?

Ich möchte eine Zeichenkette mit einem zusätzlichen Attribut, z. B. ob sie in rot oder grün gedruckt werden soll.

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

Kann Mehrfachvererbung helfen? Ich habe das nie benutzt.

Das Erben von nur object und die Verwendung von self.value=str bedeutet, dass ich alle string-ness-Meldungen (wie strip) selbst implementieren muss.

Oder gibt es eine Möglichkeit, sie weiterzuleiten, wie Ruby's missing_method?

Ich denke, mit einem Klassenebene Wörterbuch indiziert durch Instanz, um die Farbe zu speichern könnte funktionieren. Zu hässlich?

6voto

Luper Rouch Punkte 8951

Str kann vererbt werden, es sei denn, Sie verwenden eine sehr alte Python-Version, 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

2voto

Alex Martelli Punkte 805329
import UserString
class mystr(UserString.MutableString):
   ...

Es ist im Allgemeinen am besten, unveränderliche Strings und Unterklassen davon zu verwenden, aber wenn Sie eine veränderbare benötigen, ist dies der einfachste Weg, um es zu bekommen.

1voto

Andrew Hare Punkte 332190

Vielleicht eine benutzerdefinierte Klasse, die enthält eine Zeichenfolge wäre ein besserer Ansatz. Müssen Sie wirklich alle String-Methoden an den zugrunde liegenden String weitergeben? Warum legen Sie die Zeichenkette nicht über eine Eigenschaft offen und erlauben den Nutzern der Klasse, mit ihr zu tun, was sie wollen?

0voto

Welbog Punkte 57431

Sie benötigen alle Methoden von string, also erweitern Sie string und fügen Sie Ihre zusätzlichen Details hinzu. Und was ist, wenn string unveränderlich ist? Machen Sie Ihre Klasse einfach auch unveränderlich. Dann erstellen Sie sowieso neue Objekte, damit Sie nicht versehentlich denken, dass es sich um ein veränderbares Objekt handelt.

Oder, wenn Python eine hat, erweitern Sie eine veränderbare Variante von string. Ich bin nicht vertraut genug mit Python, um zu wissen, ob eine solche Struktur existiert.

0voto

Elliot Cameron Punkte 5057

Sie könnten versuchen, die stringlike Modul in PyPI . Hier ist ein Beispiel .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X