Python Enumの基本的な使い方

Python学習【365日チャレンジ!】299日目のマスターU(@Udemy11)です。

新しいiPhoneが欲しくて、どのキャリアで購入するのがいいのかネットをうろうろしていると、知らない間に3時間も経っていました。

キャリアによって本体価格も違って、車の残クレみたいな買い方があるし、プランも違うしで、Appleで本体を購入して、格安SIMを使ったほうがいいんじゃないかと思ったり、いろいろと考えていると、時間だけがどんどん過ぎていくんですよね。

まー、今使っているiPhoneも不都合が出ているわけじゃないので、替える必要はないのですが、新しいのを物色しだすと欲しくなってくるんですよね。

とはいえ、ブラックフライデー&サイバーマンデーセール、楽天スーパーセールでお金を使いすぎているので、今回のiPhoneは見送り予定になりそうです。

それでは今日も、Python学習を始めましょう。

昨日の復習

昨日は、定義した値以外の操作をするときはエラーをかえすEnumの基本を学習しました。

Enumは、列挙型定数を指定しておいて、存在しない値を使った場合はエラーを発生させることができました。

格納している値をforループを使って取り出すこともできました。

Enumの詳細については昨日の記事をごらんください。

今日は、Enumを使ってサーバーの状態に応じた処理をする方法を学習します。

Enumの使い方

例えばデータベースにサーバーの状態(activeinactive)が保存されていたとして、その状態を判断して、なにかの処理をさせるコードを書いてみます。

from enum import Enum

db = {
    'server1': 1,
    'server2': 2,
}

class Status(Enum):
    ACTIVE = 1
    INACTIVE = 2
    RUNNING = 3

if Status(db['server1']) == Status.ACTIVE:
    print('shutdown')
elif Status(db['server1']) == Status.ACTIVE:
    print('terminate')

一例として、サーバーの状態を取得して、データーベースにサーバーの名前と状態を保存したデータがあるとします。

データーベースに保存されているのが、3行目から6行目の辞書型データです。

ちなみに、1active2inactiveを表現していますが、文字列で記述すると、データベースのリソースを多く使ってしまうので、サーバーの状態を取り扱うときは、数字で入れるのが通常の使い方になります。

つまり、現状で取得している値は、server1が、activeで、server2inactiveということです。

8行目から11行目でEnumを使って、サーバーの状態を列挙型で定義しています。

次に、13行目から16行目で取得したデータベースの値がどういう状態なのか判断して、出力する処理(今回は文字列の出力)を決めています。

13行目で、データベースdbserver1value(つまり1)が、Status.ACTIVEと同じ場合は、14行目でshutdownを出力して、15行目でdbserver1value(つまり1)が、Status.INACTIVEと同じかどうかを判断して、16行目でterminateを出力します。

出力結果

shutdown

データーベースdbに格納されているserver1value1なので、Status.ACTIVEが返されて、条件が合致して、出力結果はshutdownになっています。

実際には、サーバーの状態を取得してデータベースに保存するという作業も必要ですし、shutdownを出力するのではなく、シャットダウンさせるコードも必要になりますが、擬似的にすでにデータベースに保存したという作業はすでに完了していて、シャットダウンも文字を出力することで代用しています。

まとめ

より実践的にサーバーの状態を取得するところから始まって、サーバーをシャットダウンするコードまで書いていると、それだけで一つの講座ができそうなので、酒井さんの講座では、擬似的に処理をprint出力にしているので、最初はいまいち分かりづらいかもしれません。

私自身、最初のうちは、実際の処理でprint出力するんだとおもっていましたし、具体的な処理コードではなく、擬似的な処理としてprint出力していることに気づくまでに少し時間がかかりました。

講座を繰り返し学習することで、理解が深まるので、1度だけでなく、何度も繰り返し学習したほうがいいのは間違いありません。

重要なのは、自分の中でしっかりと消化することですので、どんな講座でも一度だけでなく、継続して複数回学習したほうがいいでしょう。

継続は力なり

なんですよね。

それでは、、明日もGood Python!