5

PEP435で説明されているように、 anは次のenumように定義できます。

class Color(Enum):
    red = 1
    green = 2
    blue = 3

の結果enum membersColor、定義順に反復できます: Color.red, Color.green, Color.blue.

これは、サブクラスで宣言された順序でフィールドをレンダリングできる in をForm思い出させます。フィールドカウンターを維持することでこれを実装し、新しいフィールドがインスタンス化されるたびにカウンター値がインクリメントされます。DjangoForm

しかし、 の定義には のColorようなものはありませんFormField。これをどのように実装できますか?

4

2 に答える 2

10

Python 3 では、クラスがメタクラスで宣言されている名前空間をカスタマイズできます。たとえば、次を使用できますOrderedDict

from collections import OrderedDict

class EnumMeta(type):

    def __new__(mcls, cls, bases, d):
        print(d)
        return type.__new__(mcls, cls, bases, d)

    @classmethod
    def __prepare__(mcls, cls, bases):
        return OrderedDict()


class Color(metaclass=EnumMeta):
    red = 1
    green = 2
    blue = 3

これは印刷します

OrderedDict([('__module__', '__main__'), ('red', 1), ('green', 2), ('blue', 3)])
于 2013-05-13T03:07:09.420 に答える
4

Python 2.x では、この種の機能の基礎として、私が書いたこの恐ろしいハックを使用して、少し異なる質問に答えることができます。だから、本当に、あなたはできません。:-)

于 2013-05-13T04:24:00.827 に答える