環境
windows 10 Pro
version : Python 3.8 (docker)
一行でいうと
状態管理のファイルを分けるのをサボってハマった話、サボるな。
本題
game.py
from status import Status
class Game():
def __init__():
self.status = Status.NOTHING
status.py
from enum import Enum, auto
class Status(Enum):
NOTHING = auto()
WAITING = auto()
PLAYING = auto()
class GameStatus():
def start():
if self.game.status == Status.NOTHING:
...
if self.game.status == Status.WAITING:
...
if self.game.status == Status.PLAYING:
...
Statusによって処理を変えるって感じですね。
Statusを列挙型で作成し、初期状態Status.NOTHINGでゲームの流れによってStatesがWAITINGやPLAYINGに変更するって感じです。
game.pyのGameクラスではStatusをimportしていますが、status.pyでは同一ファイル内にStatusがあるため、importしていません。
ここでオブジェクトIDに齟齬が発生し、init関数で代入した Status.NOTHING
のみオブジェクトIDが異なり、等値比較が成立しません。
列挙型の等値比較が値ではなくオブジェクトIDを参照しているのではないかと思われます。
サボらずに
gamestatus.py
from status import Status
class GameStatus():
def start():
if self.game.status == Status.NOTHING:
...
if self.game.status == Status.WAITING:
...
if self.game.status == Status.PLAYING:
...
status.py
from enum import Enum, auto
class Status(Enum):
NOTHING = auto()
WAITING = auto()
PLAYING = auto()
って感じでファイルを分割し、全ファイル使用する際はimportする手順を踏むことでimportの有無によるオブジェクトIDの違いはうまれないです。
サボらずにきちんとファイルを分割しましょう。。。。