Wird die Objektorientierung von Python nachgerüstet?

Als ich das irgendwo sagte, wurde ich aus irgendeinem Grund getroffen.

Python ist eine objektorientierte Programmiersprache.

Zunächst wird das oben Gesagte als Voraussetzung erwähnt. Python hatte objektorientierte Funktionen, als es zum ersten Mal veröffentlicht wurde. Dies unterscheidet sich stark von Perl und PHP, die beim Versions-Upgrade nach der ersten Version mit Objektorientierung nachgerüstet wurden. Ich möchte jedoch klar behaupten, dass es sich um eine Nachrüstung handelt.

Objektorientierte Nachrüstung = nicht "reine objektorientierte Programmiersprache"

Wikipedia beschreibt das Konzept der "reinen objektorientierten Sprache". [Wikipedia-ja: Objektorientierte Programmierung](http://ja.wikipedia.org/wiki/Object-orientierte Programmierung) und [Wikipedia-de: Objektorientierte Programmierung] Siehe beide (http://en.wikipedia.org/wiki/Object-oriented_programming). Ich denke nicht, dass die Definition zwischen der japanischen und der englischen Version etwas anders ist, aber die japanische Version ist sauberer. Mit anderen Worten, das Wort "rein" wird verwendet, je nachdem, ob es von Anfang an als objektorientierte Sprache konzipiert wurde.

Was wird es sonst sein? Mit anderen Worten, es ist eine Sprache, in der die Objektorientierung später zu einem Sprachdesign hinzugefügt wird, das nicht objektorientiert ist. Keine "reine objektorientierte Programmiersprache" zu sein bedeutet, dass objektorientiert __ postscript __ ist. Die japanische Version definiert solche Dinge als "hybride objektorientierte Sprache".

Leider erwähnt Wikipedia Python als eine der objektorientierten Programmiersprachen, gibt es jedoch nicht als Beispiel für "rein" oder "hybrid" an. Obwohl es Ruby abdeckt, das kleiner als Python ist.

Nur weil es zum Zeitpunkt der ersten Veröffentlichung verfügbar ist, bedeutet dies nicht, dass es sich nicht um eine Nachrüstung handelt.

Bemerkenswert im obigen Wikipedia-Artikel ist, dass C ++ "hybrid" ist. C ++ ist eine Sprache, die C um objektorientierte usw. erweitert. __ nachgerüstet __. Als C ++ zum ersten Mal veröffentlicht wurde, war es natürlich eine objektorientierte Programmiersprache.

Sie können also nicht schlussfolgern, dass es sich nicht um eine Nachrüstung handelt, nur weil Python bei seiner ersten Veröffentlichung objektorientiert war.

Bemerkenswert ist das ursprüngliche Design vor der Veröffentlichung

Ein begeisterter Leser wird hier auf den entscheidenden Unterschied in den Ursprüngen der Sprachen C ++ und Python hinweisen. C ++ wurde in Form einer Erweiterung von C erstellt. Es ist also in Ordnung zu behaupten, dass C __ mit der Objektorientierung nachfixiert ist. Python ist jedoch keine Erweiterung einer anderen Sprache. Natürlich beziehe ich mich auf andere Sprachen und werde von ihnen beeinflusst, aber es gibt keine zugrunde liegende Sprache. Es ist eine Sprache, die von Grund auf neu entwickelt wurde.

Es scheint jedoch, dass Python in der ersten Entwurfsphase keine Objektorientierung übernommen hat. Mit anderen Worten, es war in den frühen Tagen vor seiner Veröffentlichung keine objektorientierte Programmiersprache. Danach wurde die Objektorientierung __ nachgeschrieben __ und dann der Öffentlichkeit zugänglich gemacht. Die Grundlage dieser Geschichte ist nur Erkundung anderer Sprachen für Rubyist [1.] Python, geschrieben vom Autor von Ruby. Ich fand die Glaubwürdigkeit verdächtig, aber der Autor von Python selbst Die Geschichte von Python: Hinzufügen von Unterstützung für benutzerdefinierte Klassen -for-user-defined-classes.html) (Japanische Übersetzung: The History of Python.jp: Zusätzliche Unterstützung für benutzerdefinierte Klassen -post_30.html)) spricht über seinen historischen Hintergrund. [^ 1]

[^ 1]: danke: @shibukawa

Als nächstes möchte ich einige Punkte erwähnen, die nicht objektorientiert sind, was ein Beweis für eine Nachrüstung ist.

Wo Python nicht objektorientiert ist

Python ist eine Sprache, die als objektorientierte Programmiersprache verwendet werden kann, auch wenn sie nachgerüstet wird. Ebenso kann die Nachrüstung von C ++ als objektorientierte Programmiersprache verwendet werden. Die Behauptung, dass es nicht objektorientiert verwendet werden kann, weil es sich um eine Nachrüstung handelt, ist also __ totaler Unsinn __. Python wurde in den frühen Tagen sauber eingeführt und unterscheidet sich von Sprachen wie Perl und PHP, die beim Nachrüsten schmutzig sind.

Es gibt jedoch einige Dinge, die nicht objektorientiert sind, da sie von Anfang an nicht als objektorientierte Programmiersprache konzipiert wurden. Ich möchte es mit Ruby vergleichen, das von Anfang an als objektorientierte Programmiersprache konzipiert wurde.

Es gibt eine Funktion

Python hat Funktionen. Praktische und häufig verwendete Funktionen (wie die Funktion "print ()", mit der Zeichen an die Standardausgabe ausgegeben werden, und die Funktion "len ()", mit der die Länge eines Arrays berechnet wird usw.) sind von Anfang an integriert und vorbereitet. Funktionen sind nicht objektorientiert, da sie keinem Objekt zugeordnet sind.

Umgekehrt hat Ruby keine Funktionen, nur Methoden. Aufgrund des Sprachdesigns, dass Ruby die Existenz des impliziten Objekts main und "self" der obersten Ebene weglassen kann, kann die "Kernel # put" -Methode usw. wie eine Funktion geschrieben werden, aber genau genommen "self" (oben im Code). Im Fall einer Ebene wird nur die Methode des Objekts der obersten Ebene (main) aufgerufen.

Es gab eine alte Stilklasse mit Einschränkungen

Es gab zwei Arten von Python-Klassen. Die alte Stilklasse, die vor 2.1 verwendet wurde, und die neue Stilklasse, die ab 2.2 verwendet werden kann. In der alten Stilklasse kann der integrierte Typ nicht vererbt werden. Typ und Klassenverwaltung sind getrennt (für die Objekte "a" und "b" von zwei nicht verwandten Klassen ist "Typ (a) == Typ (b)" wirklich Es gab einige Probleme wie) und die Sprache als Ganzes war nicht objektorientiert. In der neuen Stilklasse wurde die Klasse von Grund auf neu gestaltet (aber der Schreibstil ist fast der gleiche) und als objektorientiert zufriedenstellend.

In Python3 ist nur die neue Stilklasse verfügbar, und die alte Stilklasse wird abgeschafft.

Im Gegenteil, in Ruby existieren nur Klassen, und da alle Klassen gleich behandelt werden, gab es keine integrierten Typen (Klassen), die nicht vererbt werden konnten.

Python ist immer noch eine objektorientierte Programmiersprache, aber nicht die einzige.

Da Python seit langer Zeit erweitert wurde, gibt es einige Teile, die als Sprache nicht sehr schön sind. Python3 organisiert diese Teile und man kann sagen, dass Python3 eine wunderbare Sprache ist. Selbst wenn es als objektorientierte Programmiersprache betrachtet wird, hat es Funktionen und Eleganz, die mit denen einer "reinen objektorientierten Programmiersprache" vergleichbar sind, da es in eine neue Stilklasse integriert wurde.

Schließlich möchte ich diesen Artikel vorstellen, obwohl er etwas alt ist.

Methan-Blog: Warum Len eine Funktion in py3k bleibt

Für Python ist es also egal, dass es sich um eine objektorientierte Programmiersprache handelt. Natürlich ist es wichtig, "objektorientiert programmieren zu können", aber es wird angenommen, dass die Sprache selbst nicht an objektorientiert gebunden sein muss. Python hat das Bild der Bindungscodierung, aber es ist tatsächlich eine freie Sprache, die nicht an die Objektorientierung gebunden ist.

Da Ruby eine "reine objektorientierte Programmiersprache" ist, kann sie nur objektorientiert programmiert werden (obwohl sie erzwungen werden kann, hat die Verwendung von Ruby fast keinen Vorteil). Es ist leicht zu glauben, dass Ruby die Freiheit von Perl erbt, aber es mag ironisch sein, dass Sie sich den objektorientierten Einschränkungen nicht entziehen können.

Recommended Posts

Wird die Objektorientierung von Python nachgerüstet?
Wo ist Python fließend?
Was ist Pythons __init__.py?
TypeError: Das Objekt 'int' kann nicht tiefgestellt werden
[Django-Fehler] Das Objekt 'RenameAttributes' ist nicht iterierbar
Warum ist Pythons Protokollierungsbibliothek camelCase?
Ist Pythons statischer Bereich durcheinander?