また、温度による水、固体、気体、液体状態変化、。
これは、リード状態の思考モードです。
ABC インポートABCMeta、AbstractMethodの #の導入ABCMetaとAbstractMethod抽象クラスと抽象メソッドを定義 "" " バージョン1.0 :クラス水 DEF __init __(自己、州): 自己.__温度= 25 の自己.__州立=国家 DEFのSET_STATEを(セルフ、州): 自己.__ STATE =状態 DEFのchange_state(セルフ、状態): IF自己.__状態: 。フォーマット(自己.__ state.get_name() "{} {}によって変更"印刷(state.get_name())) 他: 印刷( "に初期化} {"フォーマット(state.get_name())。) 自己.__ STATE =状態 DEFのget_temperature(自己): 戻り温度セルフ.__ DEF set_temperature(自己温度): 自己.__温度=温度 自己.__温度<= 0の場合: self.change_state(固体( "固态")) ELIF自己.__温度<= 100: self.change_state(LiquidState( "液态") ) 他: self.change_state(GaseousState( "气态")) DEF rise_temperature(自己、ステップ): self.set_temperature(自己.__温度+ステップ) デフreduce_temperature(自己、ステップ): self.set_temperature(自己.__温度-工程) デフ行動(自己): 自己.__ state.behavior(自己) クラスの状態: デフ__init __(自己、名): 自己。__name =名前の デフget_name(自己): 自己.__名を返す @abstractmethodの デフ行動(自己、水): パス・ クラス固体(州): デフ__init __(自己、名): スーパー().__のinit __(名) デフ行動(自己、水): 印刷( "当前体温:{} "形式(STR(water.get_temperature())))。 クラスLiquidState(州): デフ__init __(自己、名): スーパー().__のinit __(名) デフ行動(自己、水): 印刷("当前体温:{}」形式(STR(water.get_temperature())))。 クラスGaseousState(状態): デフ__init __(自己、名): スーパー().__のinit __(名) デフ行動(自己、 水): 印刷( "当前体温:{}"形式(STR(water.get_temperature()))) DEF test_state(): 水=水(LiquidState( "液态")) water.behavior() water.set_temperature(-4) water.behavior() water.rise_temperature(18) water.behavior() water.rise_temperature(110) water.behavior() test_state() ""」 #1 バージョン2.0 クラスコンテキスト(メタクラス= ABCMeta): デフ __init__ (自己): セルフ。__states = [] セルフ。__cur_state = なし 自己。__state_info= 0 デフadd_state(自己、状態) であれば状態ではない で自己。__states : 自己。__states .append(状態) DEF :change_state(自己、状態)が あれば状態はありませんなし: 返すFalseの 場合、自己。__cur_stateは ありません:なし プリント(" 初始化为:{} " .format(state.get_name())) 他: 印刷(" 由{}变为{} "。.format(自己__cur_state .get_name()、state.get_name())) セルフ。__cur_state = 状態 self.add_state(状態) を返す真の デフGET_STATE(自己): 戻り値の自己を。__cur_state デフ_set_state_info(自己、STATE_INFO): セルフ。__state_info = STATE_INFO ための状態で自己。__states : もし:state.is_match(STATE_INFO) self.change_state(状態) デフ_get_state_info(自己): 戻り値の自己。__state_info クラスの状態: デフ __init__(自己、名): セルフ。__name = 名前の デフget_name(自己): 戻り値の自己。__name デフis_match(自己、STATE_INFO): 返す偽 @abstractmethodの デフ行動(自己、コンテキスト): パス・ クラス水(コンテキスト): デフ __init__ (自己): スーパー()。__init__ () self.add_state(固体(" 固态" )) self.add_state(LiquidState(" 液态" )) self.add_state(GaseousState(" 气态" )) self.set_temperature( 25 ) DEF get_temperature(自己): 戻りself._get_state_info() DEF set_temperature(自己温度): 自己。 _set_state_info(温度) DEF rise_temperature(自己、ステップ): self.set_temperature(self.get_temperature() + ステップ) デフreduce_temperature(自己、ステップ): self.set_temperature(self.get_temperature() - 工程) DEF行動(自己): 状態 = self.get_state() もしでisinstance(状態、状態): state.behavior(自己) DEFシングルトン(CLS、*引数、** kwargsから): インスタンス = {} DEF __singletone(*引数、** kwargsから): もし CLS ない で:インスタンス インスタンス[CLS ] =のCLS(* argsを、** kwargsから) を返すインスタンスを[CLS] リターン __singletoneの @Singletonの クラス固体(州): デフ __init__ (自己、名): スーパー()。__init__ (名) デフis_match(自己、STATE_INFO): リターン状態、<のSTATE_INFO 0 DEFの行動(自己、コンテキスト): 印刷(" 私の性格風邪高い現在の温度:{} " .format(context._get_state_info() )) @Singleton クラスLiquidState(州): DEF __init__ (セルフ、名): スーパー()__init__ (名) DEFのis_match(セルフ、状態、のSTATE_INFO): リターン <100の0 <=状態、STATE_INFO DEFの行動(自己、コンテキスト): 印刷(「私は、現在の温度を暖かく個性を持っています:{} " .format(context._get_state_info())) @Singletonの クラスGaseousState(州): water.behavior()デフ __init__ (自己、名): スーパー()。__init__ (名前) DEF is_match(自己、STATE_INFO): 戻り STATE_INFO> = 100 DEFの行動(自己、コンテキスト): プリント(" 我性格热烈、当前体温:{} " .format(context._get_state_info()))DEF test_state (): 水 = 水() water.behavior() water.set_temperature( -4 ) water.rise_temperature( 18 ) water.behavior() water.rise_temperature( 110 ) water.behavior() test_state()
C:\ Python36 \ python.exe C:ユーザ/サハラ/ PycharmProjects / /テスト/ python_search.pyが 初期化:液体 :私の穏やかな性格、現在の温度25 液体から固体状態に 、高冷私の性格、現在の温度: - 4 固体から液体への 私の優しい気質、現在の温度:14 液体から気体にする 私の暖かい人柄、現在の温度:124 終了コードで仕上げプロセス0を