2013-05-20 8 views
25

Nelle risposte a this question vengono visualizzate molte modalità di implementazione dell'enumerazione. Tuttavia, PEP0435 è ora disponibile e descrive come Enum e IntEnum diventeranno ufficiali in Python 3.4.Enum compatibile con il futuro in 2.7?

La mia domanda non riguarda i vantaggi/svantaggi di particolari modalità di simulazione di enumerazioni in Python. Piuttosto mi piacerebbe ricevere consigli sul modo più diretto per quelli di noi ancora bloccati nelle versioni 2.X.

flufl.enum era in origine l'implementazione di riferimento, ma è stata rilasciata a causa di membri non istanze del tipo (e di consentire sottoclassi con membri aggiuntivi allo stesso tempo). Quest'ultima non interesserebbe molto giorno per giorno ma forse la prima causerebbe più problemi?

Ci sono librerie là fuori che assomigliano più strettamente a ciò che viene aggiunto a 3.4 e sono compatibili con 2.7+?

+1

Questo non è un problema. L'uso delle enumerate a mano non si spezzerà quando verranno rilasciate enumerazioni "ufficiali". Inoltre, non usare le enumerazioni. Questo non è C. – Marcin

+7

L'implementazione 3.4 si basa sulla nuova funzione '__prepare__' sul metaclass, quindi il porting a 2.7 sarà una sfida, ma un backport potrebbe essere ancora possibile. Meglio attenersi a quelli arrotolati a mano; continueranno a lavorare, ma semplicemente non hanno tutti i vantaggi del modulo ufficiale. –

+0

@JoachimSauer Man mano che la lingua cresce, aumenta il numero di persone che sono meno disposte ad adattarsi, e così cresce la circoscrizione per i costrutti di tipo C. – Marcin

risposta

2

A seconda del caso d'uso, è possibile utilizzare la libreria , che consente anche di utilizzare pattern matching.

17

C'è un backport del modulo enumerazione PEP 435 disponibile su PyPI come enum34. Il backport sembra non ufficiale, tuttavia è stato creato da Ethan Furman, che è un committente core Python e uno dei coautori di PEP 435.

Il backport è dichiarato compatibile con Python 2.4 e versioni successive. Ovviamente, con Python 2 ci sono alcune, relativamente minori, differenze di comportamento, ma dalla mia esplorazione preliminare sotto Pyhon 2.7, direi che il livello di compatibilità diretta è piuttosto alto.