2014-04-12 5 views
6

Ich bin ein Python Anfänger und frage mich, was ist mehr Python Art, Dienstprogrammfunktionen zu schreiben? Wie in Java/C++, erstellen Sie eine Dienstprogrammklasse und haben Sie Methoden darin oder schreiben Sie Funktionen innerhalb des Moduls? Die Funktion soll über verschiedene Klassen im selben Modul verwendet werden.Pythonischer Weg: Utility-Funktionen in Klasse oder Modul

Dieselbe Frage für Variablen, die von verschiedenen Klassen und Funktionen im Modul verwendet werden. Ich kann sie innerhalb der Dienstprogrammklasse haben oder sie innerhalb des Moduls definieren lassen. Was ist mehr Python? Jemand bitte führe mich.

Das einzige Argument, das ich dafür habe, sie innerhalb der Klasse zu schreiben, ist, dass es objektiver ausgerichtet ist.

+4

Verwenden Sie einfach den Modulbereich. http://dirtsimple.org/2004/12/python-is-not-java.html – PaulMcG

+5

Mehr objektorientiert ist kein Ziel für sich.Wenn das Problem Objekte erfordert, schreiben Sie Klassen. Ansonsten nicht. –

+1

Warum nennen sie es überhaupt ** Objekt ** - orientierte Programmierung? Alle, die jemals darüber sprechen wollen, sind ** Klassen **. –

Antwort

7

Willkommen bei Python! Sie sind weit entfernt von C++ und Java, und das ist eine gute Sache. ;)

Dies ist ein Auszug aus einem excellent discourse on object-oriented programming von another StackOverflow volunteer:

Schnell: weg von der Oberseite des Kopfes, was die objektorientierte Programmierung ist über?

...

Wenn Sie eines der Wörter „Verkapselung“ dachte, „Vererbung“, „Polymorphismus“, „Information Hiding“, „Abstraktion“ oder „V-Tabellen“, sind Sie falsch.

Wenn Sie eines der Wörter "Klasse", "Prototyp" oder "Typ" dachten, sind Sie immer noch falsch.

Objektorientierte Programmierung ist etwa Objekte: Bündel von Zustand und Verhalten.

Warum zitiere ich das? (Nun, zum einen ist es Pythonic, um expressive Witze zu mögen, die Sie hinter die Nachricht von bekommen können.) Weil darin die Antwort auf Ihre Frage liegt.

Stellt Ihre "Dienstprogrammfunktion" tatsächlich ein Verhalten dar, das ausgedrückt werden kann schön (Schlüsselwort) als das übergeordnete Objekt in einer Vererbungshierarchie? Dann stellen Sie es auf jeden Fall in eine Klasse. Aber nicht, wenn das bedeutet, Erstellen eine Klasse nur um es in.

sind Sie immer in der objektorientierten Programmierung teilnehmen, wenn Sie Python schreiben, weil alles in Python ist ein Objekt. (Denken Sie daran, dass Sie sogar Methoden für Literale aufrufen können, z. B. 'hello'.upper().) Wenn Sie es auf eine bestimmte Weise schielen, können Sie sich sogar vorstellen, dass Ihre Module nur das Innere einer Klassendefinition sind. Sie haben ihren eigenen Geltungsbereich, möglicherweise Funktionen auf Modulebene (Modul "Methoden", wenn Sie meiner Analogie folgen) und möglicherweise innere Klassen. Das Verhalten ist extrem ähnlich, weil es im Wesentlichen die gleiche Schnittstelle ist.

Ich schlage vor, Sie haben einen Blick durch Ihre site-packages Verzeichnis auf alle verfügbaren Module und Pakete. Sie werden einige wirklich gute Ideen bekommen, wie das normalerweise gemacht wird, und Sie werden wahrscheinlich Dutzende von Beispielen von Funktionen auf Modulebene sehen, die mehr oder weniger das sind, was Sie meinen, wenn Sie "Dienstprogrammfunktion" sagen.

Verwandte Themen