Warum ist alles in Python ein Objekt? Nach allem, was ich gelesen habe, ist alles inklusive Funktionen ein Objekt. In anderen Sprachen ist es nicht dasselbe. Also, was diese Verschiebung des Ansatzes veranlasst hat, alles einschließlich sogar Funktionen als Objekte zu behandeln.Ansatz hinter alles als Objekt in Python
Antwort
Die Stärke von allem, was ein Objekt ist, ist, dass Sie Verhalten für jedes Objekt definieren können. Zum Beispiel bietet eine Funktion, die ein Objekt ist, eine einfache Möglichkeit, auf die Dokumente der Funktion zur Introspektion zuzugreifen.
print(function.__doc__)
Die Alternative wäre eine Bibliothek von Funktions zu schaffen, die eine Funktion hat und kehrte seine interessanten Eigenschaften.
import function_lib
print(function_lib.get_doc(function)
Herstellung int, str etc Klassen bedeutet, dass Sie jene Typen erweitern können auf interessante Weise für Ihr Problem Domain bieten.
Warum ist alles in Python ein Objekt?
Python (im Gegensatz zu anderen Sprachen) ist eine wirklich Orient Sprache Object (aka OOP) , wenn alles ein Objekt ist, wird es einfacher, zu suchen, zu manipulieren oder den Zugang Dinge. (Aber alles kommt auf Kosten der Geschwindigkeit)
Was aufgefordert diese Verschiebung des Ansatzes, alles zu behandeln einschließlich, sogar Funktionen, als Objekte?
„Notwendigkeit ist die Mutter der Erfindung“
Meiner Meinung nach ist die ‚Alles-Objekt ist‘ ist groß in Python. In dieser Sprache reagieren Sie nicht auf die Objekte, mit denen Sie umgehen müssen, sondern darauf, wie sie interagieren können. Eine Funktion ist nur ein Objekt, das Sie können __call__
, eine Liste ist nur ein Objekt, das Sie können __iter__
. Aber warum sollten wir Daten in nicht überlappende Gruppen aufteilen? Ein Objekt kann sich wie eine Funktion verhalten, wenn wir es aufrufen, aber auch wie ein Array, wenn wir darauf zugreifen.
Das bedeutet, dass Sie nicht Ihre "Funktion" mögen, "Ich möchte ein Array von ganzen Zahlen und ich gebe die Summe davon zurück" aber mehr "Ich werde versuchen, über das Ding zu iterieren, das mir jemand gab und es versuchte um sie zusammenzufügen, wenn etwas schief geht, werde ich es dem Anrufer durch raise
Fehler melden und er wird es hassen, sein Verhalten zu ändern ".
Das interessanteste Beispiel ist __add__
. Wenn Sie etwas wie Object1 + Object2
versuchen, wird Python fragen (schön ^^) zu Object1
zu versuchen, sich mit object2
(Object1.__add__(Object2))
). Es gibt 2 Szenarien hier: entweder Oject1
weiß, wie man sich zu Object2
hinzufügen und alles ist in Ordnung, entweder er erhöht a NotImplemented
Fehler und Python fragt Object2
an radd sich selbst zu Object1
.Nur mit diesem Mechanismus können Sie Ihrem Objekt beibringen, sich mit jedem anderen Objekt hinzuzufügen, können Sie Kommutativität verwalten, ...
- 1. Ist alles größer als Keines?
- 2. Python erstellt alles von Heap?
- 3. Wie kann alles ein Objekt sein?
- 4. Objekt ist alles Nils in Rails 4+?
- 5. Ist alles ein Objekt in Ruby?
- 6. Alles ist ein Objekt in Scala
- 7. Schneller Ansatz als gsub in r
- 8. Trouble bekommen. * Zu tatsächlich alles in Python
- 9. Python regulärer Ausdruck entspricht alles
- 10. Python-Funktion akzeptiert ein Objekt als Parameter?
- 11. Unterschied in diesen zwei Ansatz zur Sammlung Array-Objekt
- 12. Warum fängt außer object alles in Python ein?
- 13. vektorisierten Ansatz mit Binning numpy/scipy in Python
- 14. bester Ansatz für Boolesche Objekt String in Java Umwandlung
- 15. Behandelt alles in der Standardbibliothek Strings als Unicode in Python 3.0?
- 16. Treat separate Dateien als eine Datei-Objekt in Python
- 17. Objekt-ID als Hash für Objekte in Python verwenden
- 18. Ruby - alles wird als wahr gewertet
- 19. Objekt und Instanzen in Python
- 20. Javascript RegExp: Spiel alles andere als Zeilenumbrüche
- 21. Java und Ruby: "Alles ist ein Objekt" in OO?
- 22. Kann PowerShell als Code hinter WPF
- 23. Was sind Python Namespaces alles über
- 24. convert `com.ning.http.client.ListenableFuture [Alles]` `in scala.concurrent.Future [Alles]`
- 25. Wie JSON-Objekt hinter Code in ASP.Net mit VB
- 26. Ruby, 'Block' Konstrukt Pause 'Alles ist Objekt' Regel?
- 27. Python: `von import * x` nicht alles importieren
- 28. Rational hinter Python ist für Syntax bevorzugt
- 29. Alles wie SciPy in Ruby?
- 30. Ohne alles andere als API-Paket in Maven
Sehr relevant: https: //mail.python.org/pipermail/python-list/2015-June/691689.html – miradulo
Während die Frage interessant ist, ist dies nicht wirklich der richtige Ort, um über Sprachdesign zu sprechen.Außerdem, außer GVR selbst kommt hier her Antworten werden Ich bin wahrscheinlich meinungsbezogen. – polku
Anstatt diese Frage zu schließen, sollte sie nicht zu programmers.stackexchange.com verschoben werden? – Jivan