Большинство Pythoni c способ установки дружественных и явных значений флага? - PullRequest
0 голосов
/ 06 марта 2020

Какой самый Pythoni c способ дать значения флагов, которые удобны для пользователя и очевидны для тех, кто читает код?

Предположим, я получил следующий метод для класса, который в зависимости от вход будет вычислять определенную multiplier и устанавливать флаг 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 в других разделах кода читатель мог сразу сказать, какому значению флага соответствует какая опция.

Таким образом, вместо того, чтобы иметь self.cracking_mode = 2, в идеале я хотел бы иметь self.cracking_mode = "mixed_transverse_tension_shear".

Однако я не думаю, что это Pythoni c способ делать что-то, кроме Дело в том, что сравнение строк занимает больше времени, чем сравнение целых чисел.

Итак, каков будет самый Pythoni c (и удобный для пользователя) способ решения проблемы?

1 Ответ

1 голос
/ 06 марта 2020

Это как раз и есть цель enum на других языках. На мой взгляд, самый "pythoni c" способ сделать что-то - просто самый ясный - так что сравнение строк не так уж и плохо. Возможно, немного лучше было бы создать константы, которые представляют значения (MIXED_TRANVERSE_TENSION_SHEAR = 2) как члены класса stati c, а затем сравнивать с этими константами, что является более эффективным целочисленным сравнением.

...