设置用户友好和显式标志值的大多数 Pythonic 方式?

Most Pythonic way of setting user-friendly and explicit flag values?

为阅读代码的人提供用户友好且不言而喻的标志值的最 Pythonic 方式是什么?

假设我得到了 class 的以下方法,这取决于输入将计算某个 multiplier 并为该 class 实例设置一个 cracking_mode 标志:

def evaluate_first_matrix_crack(self, base_sigma22, base_tau12):
    # Mixed transverse tension-shear
    if base_sigma22 > 0 and base_tau12 != 0:
       self.cracking_mode = 2
       multiplier = sqrt(1. / ((base_sigma22 / self.Yt_is) ** 2 + (base_tau12 / self.S_is) ** 2))

    # Pure transverse tension
    elif base_sigma22 > 0 and base_tau12 == 0:
        self.cracking_mode = 0
        multiplier = self.Yt_is / base_sigma22

    # Pure shear
    elif base_sigma22 <= 0 and base_tau12 != 0:
       self.cracking_mode = 1
        multiplier = self.Yt_is / base_sigma22

    return multiplier

"cracking_mode" 标志将影响在代码的其他部分调用哪些方法。我希望标志值尽可能对用户友好,以便在代码的其他部分通过 if 语句检查它们时,reader 可以立即判断哪个标志值对应于哪个选项。

因此,与其拥有 self.cracking_mode = 2,我更希望拥有 self.cracking_mode = "mixed_transverse_tension_shear"

但是,除了比较字符串比比较整数需要更长的时间之外,我认为这不是 Pythonic 的做事方式。

那么解决问题的最 Pythonic(和用户友好)的方法是什么?

这正是其他语言中enum的目的。在我看来,最 "pythonic" 的做事方式就是最清晰的 - 所以字符串比较并不是那么糟糕。可能更好的做法是创建将值 (MIXED_TRANVERSE_TENSION_SHEAR = 2) 表示为静态 class 成员的常量,然后与这些常量进行比较,这是更有效的整数比较。