2010-08-25 23 views
9

Quindi ho una classe in un modulo che ha alcuni metodi statici. Un paio di questi metodi statici eseguono solo controlli e cose crc, e non sono veramente utili al di fuori della classe (vorrei solo renderli metodi statici privati ​​in java o C++). Mi chiedo se dovrei invece renderli funzioni di classe globale (al di fuori della classe).Metodo statico vs funzione modulo in python

C'è qualche vantaggio nel farlo in entrambi i modi? La classe viene importata da from module import class, quindi non sono preoccupato che anche questi moduli vengano inseriti. Ma dovrei semplicemente renderli dei metodi di classe in modo che from module import * sia più sicuro o qualcosa del genere?

risposta

7

Il prefisso dei nomi di funzione con un singolo trattino basso è una convenzione per dire che sono privati ​​e impedisce anche che vengano importati con un from module import *.

Un'altra tecnica è quella di specificare un elenco __all__ nel modulo - questo può essere fatto solo nel modulo stesso (non è necessario un file __init__.py)

__all__ = ['my_class_name'] 

Questo è più di un approccio whitelist, in modo da avere il pieno controllo su ciò che viene importato senza utilizzare i trattini bassi.

Quindi, a meno che i metodi non appartengano logicamente alla classe e dalla descrizione non lo fanno, li lascerei come funzioni a livello di modulo e utilizzerò uno di questi due approcci per renderli privati.

+0

Non sapevo di "__all__'. Grazie =] – Falmarri

3

Realizzale funzioni a livello di modulo e le precede con un trattino singolo in modo che i consumatori capiscano che sono per uso privato.

3

Se non sono utili al di fuori della classe, qual è la motivazione per renderli metodi di modulo? Mantenerli come metodo statico rende il nome più pulito.

L'unico vantaggio è spostarlo all'esterno, in modo che le persone possano farvi riferimento senza utilizzare il nome della classe. Supponiamo che tu abbia un metodo di registrazione che ha un riferimento in una tonnellata di luoghi, questo può avere senso come scelta stilistica.