Can someone explain why enum-vs-string is being discussed as if it is an
either-or choice? Why not just call the enum class using the input so that
you can supply a string or enum?

NanChoice(nan_choice_input)

I understand this would not be a really great choice for a flags enum or
int enum, but for single-choice strings, it seems like a reasonable
approach to me.

In the example below from my own code I just call the enums using the input
strings so that whether I decide to pass in a string, or import and use an
actual enum object, it will work fine either way.

from enum import Enum
import pandas as pd


class LoadType(Enum):
    dead = "D"
    live = "L"
    snow = "S"
    wind = "W"
    seismic = "E"
    D = "D"
    L = "L"
    S = "S"
    W = "W"
    E = "E"


class RiskCategory(Enum):
    """Risk Category of Buildings and Other Structures for Flood,
Wind, Snow, Earthquake, and Ice Loads.

    cf. Table 1.5-1
    """
    I = "I"
    II = "II"
    III = "III"
    IV = "IV"


_Table_1_pt_5_dsh_2 = pd.DataFrame({LoadType.snow: [0.80, 1.00, 1.10, 1.20],
                             LoadType.seismic: [1.00, 1.00, 1.25, 1.50]},
                            index=list(RiskCategory))


def importance_factor(load_type_input):
    return lambda risk_input:
_Table_1_pt_5_dsh_2[LoadType(load_type_input)][RiskCategory(risk_input)]


Maybe this idea sucks? I don't have any way of knowing since nobody reads
my code other than future me (who happens to be somewhat dim), but in the
past, I have used enums like this in my own code mostly as 1. a
documentation feature so I can easily remember what the valid choices are,
and 2. an easy error catcher since you get a nice exception when you supply
an invalid string to the enum class:

>>> class MyEnum(Enum):
...  a: "a"
...  b: "b"
...
>>> MyEnum("c")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\program files\python39\lib\enum.py", line 384, in __call__
    return cls.__new__(cls, value)
  File "c:\program files\python39\lib\enum.py", line 702, in __new__
    raise ve_exc
ValueError: 'c' is not a valid MyEnum


Could this approach be useful for handling nans in the stats module? Maybe
the overhead of calling the enum be considered too high or something?


---
Ricky.

"I've never met a Kentucky man who wasn't either thinking about going home
or actually going home." - Happy Chandler
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/ZH4CCDFTGZRCO6XBNMM354HOHLPNDUR5/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to