Kann ich eigene Methoden/Attribute eingebauten Python-Typen?
Beispielsweise sagen, ich möchte hinzufügen helloWorld()
Methode, um Python-dict-Typ. Kann ich dies tun?
JavaScript hat ein Prototyp-Objekt, das auf diese Weise verhält. Vielleicht ist es schlechtes design und sollte ich eine Unterklasse der dict-Objekt, aber dann funktioniert es nur auf die Unterklassen, und ich will, dass es funktioniert auf alle zukünftigen Wörterbüchern.
Hier ist, wie es wäre, nach unten gehen in JavaScript:
String.prototype.hello = function() {
alert("Hello, " + this + "!");
}
"Jed".hello() //alerts "Hello, Jed!"
Hier ist ein nützlicher link mit mehr Beispielen— http://www.javascriptkit.com/javatutors/proto3.shtml
Sie können dies tun, in ruby zu, indem Sie einfach die Klasse wieder, sprich: die Klasse String; def new_method()...;end; ich bin mir ziemlich sicher, dass python hat auch so etwas.
Ich glaube, du bist unter Bezugnahme auf monkey-patching, das ist meist verpönt.
Ja genau. Es ist getan über alle, die in Schienen.
Dies ist spezifisch für
Ich glaube, du bist unter Bezugnahme auf monkey-patching, das ist meist verpönt.
Ja genau. Es ist getan über alle, die in Schienen.
Dies ist spezifisch für
numpy.ndarray
aber wenn jemand hier, um dieses versuchen und scheiterte beim Versuch, eine Methode hinzufügen, um eine Instanz von numpy.ndarray
, werfen Sie einen Blick auf die numpy.ndarray.view
Methode.InformationsquelleAutor jedmao | 2011-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht direkt fügen Sie die folgende Methode, um den ursprünglichen Typ. Sie können jedoch eine Unterklasse der Typ dann ersetzen Sie es in der built-in/global-namespace, der erreicht am meisten von der gewünschten Wirkung. Leider Objekten erstellt von literal-syntax wird weiterhin von der Vanille-Typ und nicht der neue Methoden/Attribute.
Hier ist, was es sieht aus wie
Hinweis: Die
__builtin__
Modul wurde umbenannt zubuiltins
in Python ist3.Auch stieß ich auf ein problem in python 2. Danach kann ich nicht überprüfen, für die Art mehr > (")==str< gibt >false<. Wenn ich den Typ("") bekomme ich <type 'str'>, aber irgendwie ist das zu vergleichen funktioniert nicht mehr. Vor dem ausführen des 'line builtin.str = mystr' das Kontrollkästchen für die Art funktioniert.
wie OP sagte, ", selbst erstellte Objekte literal-syntax wird weiterhin von der Vanille-Typ"
In der Regel sollte man nicht mit == bei der überprüfung für die Arten. Stattdessen isinstance("", str), die True zurückgeben, wenn der erste Wert eine Instanz des zweiten, oder jede Unterklasse des zweiten.
InformationsquelleAutor TryPyPy
Ja, indem bilden von Unterklassen dieser Arten. Sehen unifying-Typen und-Klassen in Python.
Nein, das bedeutet nicht, dass die tatsächliche dicts wird diese Art, denn das wäre verwirrend. Unterklassen ein builtin-Typ ist der bevorzugte Weg, um Funktionen hinzuzufügen.
Warum denkst du, es wäre sehr nützlich? Ich habe nie wirklich verstanden, jene Menschen, die möchten für diesen. Glaubst du, 5 sollten nicht vom Typ int, oder meinst du den Typ int sein sollte veränderlich (während 5 selbst ist unveränderlich)?
Ich will
any_dictionary_instance.len()
oder.size()
zusätzlich zu den zur Verfügungany_dictionary_instance.__len__()
undlen(any_dictionary_instance)
dass es nennt. Größe ist semantisch eine Eigenschaft von Behältern, so ist es bequemer zu schreiben wie Sie sagen z.B. "die Iteration von 0 bis zur Objekt-Größe" ... Hoppla, kann nicht sagen, dass die Sprache zwingt mich, formuliere es als "Iteration von 0 bis zur Größe des Objekts". Für nichts besseres, als historische Gründe, die ich sammeln.Ja, aber nicht jeder container hat die Größe (als Eigenschaft), der Sächsische Genitiv ist nicht wirklich eine unterstützte grammatische Konstruktion in vielen Programmiersprachen :-), und vor allem, Python hat eine viel bessere Art und Weise der Iteration durch Container, bedeutet das nicht, setzen Größe. Aber ok, ich denke, ich kann beziehen sich auf grammatische wünschen, wenn die "Objekt-Größe" ist wirklich ein natürlicher Ausdruck für Sie als "Größe des Objekts". Ich bin nicht eine Muttersprachlerin der englischen Sprache, und für mich sind Sie beide gleich klingen ok.
dies ist, was passiert, wenn Sie vergessen, um zu sehen, den Geist eines Arguments stattdessen gehen Sie auf Streifzug. Was Evgeni gedacht war Python als flexibel, dynamisch typisierte Sprache, sollte es uns ermöglichen, um eigene Methoden, um die integrierten Klassen. Nachdem alle, es ist sein code und seine Laufzeit.
InformationsquelleAutor Rafe Kettler
Habe gerade versucht das forbbidenfruit!
hier ist der code, sehr einfach!
InformationsquelleAutor dameng
Unterklassen ist der Weg zu gehen in Python. Polyglotte Programmierer lernen, um das richtige Werkzeug für die richtige situation - im Rahmen des zumutbaren. Etwas so kunstvoll konstruiert wie Schienen (DSL mit Ruby, Ruby) ist schmerzhaft schwer zu implementieren in einer Sprache mit mehr starre syntax wie Python. Menschen oft zu vergleichen die beiden und sagen, wie ähnlich Sie sind. Der Vergleich ist etwas unfair. Python glänzt auf seine eigene Art und Weise. totochto.
InformationsquelleAutor totochto