2010-08-25 7 views
9

So habe ich eine Klasse in einem Modul, das einige statische Methoden hat. Ein paar dieser statischen Methoden machen nur CRC-Checks und so, und sie sind außerhalb der Klasse nicht wirklich nützlich (ich würde sie nur zu privaten statischen Methoden in Java oder C++ machen). Ich frage mich, ob ich sie stattdessen zu globalen Klassenfunktionen (außerhalb der Klasse) machen sollte.Statische Methode vs Modul-Funktion in Python

Gibt es einen Vorteil, dies zu tun? Die Klasse wird von from module import class importiert, also mache ich mir keine Sorgen darüber, dass diese Module ebenfalls eingefügt werden. Aber sollte ich sie nur Klassenmethoden machen, damit from module import * sicherer ist oder so?

Antwort

7

Das Vorfixieren der Funktionsnamen mit einem einzelnen Unterstrich ist eine Konvention, die besagt, dass sie privat sind, und verhindert außerdem, dass sie mit einer from module import * importiert werden.

Eine andere Technik ist es, eine __all__ Liste im Modul angeben - das kann nur in dem Modul durchgeführt werden selbst (Sie eine __init__.py Datei nicht brauchen)

__all__ = ['my_class_name'] 

Dies ist eher ein Whitelist-Ansatz, Auf diese Weise können Sie steuern, was importiert wird, ohne führende Unterstriche zu verwenden.

Also, wenn Ihre Methoden logisch in die Klasse gehören, und aus Ihrer Beschreibung nicht, würde ich sie als Modulebene Funktionen lassen und einen dieser beiden Ansätze verwenden, um sie privat zu machen.

+0

Ich wusste nicht über '__all__'. Danke =] – Falmarri

3

Machen Sie sie zu Funktionen auf Modulebene und setzen Sie ihnen einen einzelnen Unterstrich voran, damit die Verbraucher verstehen, dass sie für den privaten Gebrauch bestimmt sind.

3

Wenn sie außerhalb der Klasse nicht nützlich sind, was ist die Motivation, diese Modulmethoden zu machen? Wenn Sie sie als statische Methode beibehalten, wird der Namensraum sauberer.

Der einzige Vorteil, es nach draußen zu verschieben, vielleicht, damit Leute sie verweisen können, ohne sie den Klassennamen zu benutzen. Angenommen, Sie haben eine Log-Methode, die an vielen Stellen referenziert wurde, kann dies als Stilwahl sinnvoll sein.