Wie füge ich meinen eigenen benutzerdefinierten Attributen zu vorhandenen integrierten Python-Typen hinzu? Wie eine Schnur? [Duplikat]

7

Ich möchte so etwas machen ...

%Vor%

Was "Hallo Welt!" ausdrucken würde

EDIT: Siehe Kann ich hinzufügen benutzerdefinierte Methoden / Attribute zu integrierten Python-Typen?

    
jedmao 15.03.2010, 02:07
quelle

8 Antworten

8

Kurz gesagt, Sie können nicht. Der Python-Weg wäre die Unterklasse String und Arbeit von dort.

    
sczizzo 15.03.2010, 02:09
quelle
18

In CPython können Sie Ctypes verwenden, um auf die C-API des Interpreters zuzugreifen. Auf diese Weise können Sie zur Laufzeit eingebaute Typen ändern.

%Vor%

Obwohl dies interessant ist und vielleicht interessant ist, um es herauszufinden ... nicht verwenden Sie es im produktiven Code. Unterlasse einfach den eingebauten Typ oder versuche herauszufinden, ob es noch einen anderen gibt, vielleicht eher pythonisch, gehe auf dein Problem zu.

    
DasIch 15.03.2010 22:34
quelle
3

Ruby Weg:

%Vor%

Python Weg:

%Vor%

Wo Roman auf einer festen Liste von eingebauten Typen oder irgendetwas mit einer __int__ -Methode arbeitet.

Es ist eine Implementierungsbeschränkung von CPython, dass Sie keine Attribute von integrierten / Erweiterungstypen festlegen können. Es wird von kulturellen Vorlieben begleiten Affen Patching für Stand-alone-Funktionen, benutzerdefinierte Klassen, die als Attribut gewünschtes Objekt (oder auch Subklassen in seltenen Fällen).

zu vermeiden     
jfs 15.03.2010 06:43
quelle
2

Dafür können Sie str ableiten.

Obwohl technisch möglich, bauen Sie in den meisten Fällen Buildklassen (wie str ) ab, aber Sie suchen nach einer 'has-a'-Beziehung, nicht' is-a ', daher sollte composition verwendet werden Vererbung (dh Sie sollten eine Klasse mit einem String als Instanzattribut und nicht als Unterklassenzeichenfolge erstellen).

    
shylent 15.03.2010 06:33
quelle
1

Sie nicht. Verwenden Sie separate Wörterbücher, um (logisch gesprochen) Informationen an unveränderliche Werte wie Zeichenfolgen oder Zahlen anzuhängen (der String- oder Zahlenwert als Schlüssel, die Information als entsprechender Wert im Diktat).

    
Alex Martelli 15.03.2010 02:18
quelle
0

Python unterstützt diese Funktion nicht.

    
joeforker 15.03.2010 02:10
quelle
0

Sie können nicht, es ist nicht Pythonic. Monkey-Patching ist kein allgemein verwendetes Feature von Python, also für die Performance - glaube ich - Gründe, warum Sie es nicht mit den eingebauten Klassen oder Instanzen davon machen können.

Tatsächlich hat es seinen eigenen Namen in Python: duck-punching.

    
Grant Paul 15.03.2010 06:15
quelle
0

Hier ist eine Idee. Es ist nicht perfekt, weil es nicht für alle Strings funktioniert, aber es könnte hilfreich sein.

So legen Sie Attribute einer Zeichenfolge oder eines anderen Objekts fest:

%Vor%

Hier ist ein Beispiel:

%Vor%     
Scelesto 22.05.2014 20:49
quelle