Wie können Sie in Python eine Klasse erweitern? Zum Beispiel, wenn ich habe
color.py
class Color:
def __init__(self, color):
self.color = color
def getcolor(self):
return self.color
color_extended.py
import Color
class Color:
def getcolor(self):
return self.color + " extended!"
Aber das funktioniert nicht ... Ich gehe davon aus, dass wenn ich arbeite color_extended.py
, wenn ich ein Farbobjekt erstelle und die getcolor
Funktion verwende, das Objekt mit der Zeichenfolge "erweitert!" Zurückgegeben wird. schlussendlich. Außerdem sollte es den Init vom Import bekommen haben.
Angenommen, Python 3.1
Vielen Dank
Antworten:
Verwenden:
Wenn dieser Python 2.x waren, würden Sie auch ableiten
color.Color
ausobject
, es zu machen , neue Stil - Klasse :Dies ist in Python 3.x nicht erforderlich.
quelle
class color(color):
Definiert eine neue Klasse, die die alte ersetzt, aber von dieser abgeleitet ist. (Dies scheint das zu sein, was das OP versucht.)class extended_color(color):
ist in der Regel schlechte Standards -class ExtendedColor(Color):
sollte für Klassen sein. Nur ein TrottelEine andere Möglichkeit, Klassen zu erweitern (insbesondere neue Methoden hinzuzufügen, vorhandene nicht zu ändern), auch integrierte Klassen, besteht darin, einen Präprozessor zu verwenden, der die Möglichkeit bietet, den Bereich von Python selbst zu erweitern und zu erweitern und die Erweiterung in zu konvertieren normale Python-Syntax, bevor Python sie tatsächlich sieht.
Ich habe dies
str()
zum Beispiel getan, um die Klasse von Python 2 zu erweitern .str()
ist ein besonders interessantes Ziel aufgrund der impliziten Verknüpfung mit zitierten Daten wie'this'
und'that'
.Hier ist ein erweiterter Code, bei dem die einzige hinzugefügte Nicht-Python-Syntax das
extend:testDottedQuad
Bit ist:Danach kann ich den Code eingeben, der dem Präprozessor zugeführt wird:
Der Präprozessor isst das, spuckt normales Python ohne Monkeypatching aus und Python macht das, was ich beabsichtigt habe.
So wie ein AC-Präprozessor c Funktionen hinzufügt, kann auch ein Python-Präprozessor Python Funktionen hinzufügen.
Meine Präprozessor-Implementierung ist zu groß für eine Stapelüberlauf-Antwort, aber für diejenigen, die interessiert sein könnten, ist sie hier auf GitHub.
quelle