Erweitern integrierter Python-Typen mit benutzerdefinierten Attributen und Methoden
Erweitern integrierter Typen wie Wörterbücher mit benutzerdefinierten Methoden oder Attributen in Python mag wie eine einfache Anfrage erscheinen. Das Design von Python unterstützt solche Änderungen jedoch nicht nativ. Im Gegensatz zum Prototyp-Vererbungsmechanismus von JavaScript sind die integrierten Typen von Python statisch und unveränderlich.
Alternativer Ansatz: Klassenunterklassen
Das direkte Hinzufügen von Methoden zu integrierten Typen ist jedoch nicht der Fall Wenn möglich, können Sie einen ähnlichen Effekt erzielen, indem Sie den Typ in eine Unterklasse unterteilen und ihn im globalen Namespace ersetzen. Dadurch können Sie benutzerdefinierte Attribute und Methoden zu Instanzen der neuen Unterklasse hinzufügen.
Angenommen, wir möchten dem Typ dict eine helloWorld()-Methode hinzufügen. Wir können die folgende Unterklasse erstellen:
class mydict(dict):
def helloWorld(self):
# Custom method implementation
print("Hello world from mydict!")
Um das integrierte Diktat durch unsere Unterklasse zu ersetzen, können wir das Modul __builtin__ verwenden:
import __builtin__
__builtin__.dict = mydict
Verwendung und Einschränkungen
Jetzt sind alle zukünftigen Wörterbücher, die mit dem dict-Konstruktor erstellt werden, Instanzen von mydict und verfügen über die helloWorld()-Methode:
d = dict()
d.helloWorld() # Outputs "Hello world from mydict!"
Es ist jedoch wichtig zu beachten, dass Objekte, die mit literaler Syntax erstellt wurden, weiterhin Instanzen des ursprünglichen Diktattyps sind und nicht über Ihre benutzerdefinierten Methoden oder Attribute verfügen :
d = {}
d.helloWorld() # Raises AttributeError
Dies liegt daran, dass die Literalsyntax den Objektkonstruktionsprozess umgeht und direkt Instanzen integrierter Typen erstellt. Um diese Einschränkung zu überwinden, können Sie eine Funktion definieren, die integrierte Objekte in Ihre Unterklasseninstanzen konvertiert:
def my_dict(d):
return mydict(d)
Verwenden Sie dann die Funktion anstelle der Literalsyntax, um Wörterbücher zu erstellen:
d = my_dict({})
d.helloWorld() # Outputs "Hello world from mydict!"
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3