2016-06-07 11 views
2

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

+1

Sehr relevant: https: //mail.python.org/pipermail/python-list/2015-June/691689.html – miradulo

+2

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

+0

Anstatt diese Frage zu schließen, sollte sie nicht zu programmers.stackexchange.com verschoben werden? – Jivan

Antwort

-1

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.

-1

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“

-1

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, ...

Verwandte Themen