2013-05-20 2 views
25

列挙型を実装する多くの方法が、this questionの回答に示されています。しかし、PEP0435が出てきており、EnumとIntEnumがPython 3.4でどのように正式になるのかを説明しています。将来の互換性のある列挙型は2.7ですか?

私の質問は、Pythonで列挙型をシミュレートする特定の方法の長所と短所に関するものではありません。むしろ私はまだ2.Xのリリースで立ち往生している人たちのために、最も先進的な方法についてアドバイスをしたいと思います。

flufl.enumはもともとリファレンス実装になりましたが、メンバーがそのタイプのインスタンスではなく(追加のメンバーを同時に含むサブクラスを許可するため)、削除されました。後者は多くの日々のことに影響を与えませんが、おそらく前者はより多くの問題を引き起こすでしょうか?

3.4に追加されているものに近いライブラリがあり、2.7+と互換性がありますか?

+1

これは問題ではありません。あなたの手巻きの列挙体を使用することは、 "公式の"列挙型が解放されたときに壊れることはありません。さらに、enumを使用しないでください。これはCではありません。 – Marcin

+7

3.4の実装は、メタクラス上の新しい '__prepare__'関数に依存しているため、2.7に戻すことは難しいでしょうが、バックポートはまだ可能です。あなたの手巻きのものにぶつかってください。彼らは仕事を続けますが、正式なモジュールのすべての利点を持っているわけではありません。 –

+0

@JoachimSauer言語が成長するにつれて、それほど適応しにくい人が増え、Cのような構成要素の構成要素が増えます。 – Marcin

答えて

2

あなたのユースケースに応じて、ライブラリを使用して逃げることができます。pattern matchingも可能です。

17

PEP 435列挙モジュールのバックポートは、enum34としてPyPIで利用できます。バックポートは非​​公式だと思われますが、PythonコアコミッターでEthan Furman(PEP 435の共同作者)の一人です。

バックポートはPython 2.4以上と互換性があると宣言されています。もちろん、Python 2の下では動作の違いは比較的少々ありますが、Pyhon 2.7での私の予備調査では、前方互換性のレベルはかなり高いと言えます。

関連する問題