+ 1 для предложений, которые вы, вероятно, хотите перечислить. Поскольку python не поддерживает их, я бы, вероятно, определил класс для его инкапсуляции. Таким образом, вы можете применять правила при обновлении. Как минимум, это даст вам то же поведение, что и перечисление. При необходимости вы также можете контролировать изменения правового состояния, например,
class Widget:
def __init__(self, state="Closed"):
self.state=state
def open(self):
if self.state == "Closed":
self.state = "Open"
elif self.state == "Open":
pass
else:
# do whatever if trying to open in "Running" state...
def close(self):
# etc.
class ThingContainingWidget:
def __init__(self):
self.widget=Widget()
def doSomethingThatAffectsWidget(self):
self.widget.close()
# etc.
В зависимости от проблемы вам может понадобиться / захотеть переместить логику изменения состояния в охватывающий класс (например, если поведение состояния зависит также и от других атрибутов охватывающего класса). Но я бы, вероятно, оставил базовую проверку (гарантируя, что значение может быть только Open / Closed / Running) в классе Widget
.
Давно не делал джанго, но не могу придумать причину, по которой это не сработает.
НТН.