[Python-Dev] Enum Eccentricities (original) (raw)

Stephen J. Turnbull stephen at xemacs.org
Mon Sep 23 19:46:30 CEST 2013


Guido van Rossum writes:

On Mon, Sep 23, 2013 at 8:17 AM, Zero Piraeus <z at etiol.net> wrote:

On Mon, Sep 23, 2013 at 09:45:46AM -0400, Chris Lambacher wrote:

[...] An example of how this will be used in practice is:>     {% if object.state == object.state.completed %}       some html     {% endif %}

[Zero Piraeus suggests instead:]

    {% if object.state == State.completed %}        some html      {% endif %}

That's quite intelligible, and doesn't require anyone to know that an Enum member's siblings can, in your proposal, be accessed directly via dot notation (an unintuitive state of affairs, to me at least).

Right. The OP is just concerned that (because these are Django templates) he will have to pass in the 'State' class as a separate template parameter for this to work.

Given your earlier description of what makes sense for class attributes, an alternative solution might be to put State-valued class attributes (constants) on DjangoObject (the object's class), like DjangoObject.completed_state = State.completed, and so on. Then you write "{% if object.state == object.completed_state %}".

IIUC, you wouldn't have a problem with that? It still doesn't feel quite right, but given the limitations of a template language, it might grow on me.

Another alternative would be to have attributes like 'completed' be boolean properties computed from a State-valued attribute, and write just "{% if object.completed %}". This actually feels good to me given it's a templating language.

But I don't know if either of those is reasonable in the context.



More information about the Python-Dev mailing list