2024-06-16 08:59:25 发布
网友
我最近读到一篇文章,其中有人提到在python中不需要使用enum。我对这是不是真的很感兴趣。在
例如,我使用枚举来表示调制解调器控制信号:
class Signals: CTS = "CTS" DSR = "DSR" ...
我用if signal == Signals.CTS:不是比if signal == "CTS":好,还是我遗漏了什么?在
if signal == Signals.CTS:
if signal == "CTS":
在您的确切例子中,我想使用已定义的常量是可以的,因为如果找不到常量,那么会引发错误,唉,字符串中的错误就不会出现。在
我想至少有一个使用面向对象的解决方案。在
顺便说一句:if "CTS":将始终为True,因为只有空字符串被解释为False。在
if "CTS":
True
False
Signals.CTS似乎比“CTS”好。但Signals不是枚举,而是一个具有特定字段的类。正如我所听到的,这种说法是,您不需要单独的enum语言构造,因为您可以像在问题中所做的那样做,或者可能:
Signals.CTS
CTS, DSR, XXX, YYY, ZZZ = range(5)
{g>,你可以用类似的方式导入一个模块。这在标准库中的几个模块中使用,包括re和os模块。在
这取决于您是否使用Signal.CTS,Signal.DSR的值作为数据。例如,如果您将这些字符串发送到实际的调制解调器。如果这是真的,那么最好像您一样定义别名,因为当您期望的时候,外部接口往往会发生变化或不太统一。否则,如果您从未使用过符号值,则可以跳过抽象层直接使用字符串。在
Signal.CTS
Signal.DSR
唯一的问题是不要混合内部符号和外部数据。在
在您的确切例子中,我想使用已定义的常量是可以的,因为如果找不到常量,那么会引发错误,唉,字符串中的错误就不会出现。在
我想至少有一个使用面向对象的解决方案。在
顺便说一句:
if "CTS":
将始终为True
,因为只有空字符串被解释为False
。在Signals.CTS
似乎比“CTS”好。但Signals不是枚举,而是一个具有特定字段的类。正如我所听到的,这种说法是,您不需要单独的enum语言构造,因为您可以像在问题中所做的那样做,或者可能:{g>,你可以用类似的方式导入一个模块。这在标准库中的几个模块中使用,包括re和os模块。在
这取决于您是否使用
Signal.CTS
,Signal.DSR
的值作为数据。例如,如果您将这些字符串发送到实际的调制解调器。如果这是真的,那么最好像您一样定义别名,因为当您期望的时候,外部接口往往会发生变化或不太统一。否则,如果您从未使用过符号值,则可以跳过抽象层直接使用字符串。在唯一的问题是不要混合内部符号和外部数据。在
相关问题 更多 >
编程相关推荐