我正在嘗試創建一個使用策略模式回傳“緊急訊息”的程式。我以更實用的方式構建它,而不是使用抽象類來定義我的函式,我只是定義了函式并呼叫了它們。
但是,我得到了錯誤
TypeError: text_alarm() missing 1 required positional argument: 'message'
我的代碼:
class EmergencyDrillBase(object):
_alarm_behavior = None
_suggested_message = None
def __init__(self, name, description):
self.name = name
self.description = description
def set_alarm_behavior(self, alarm_behavior):
self._alarm_behavior = alarm_behavior
def set_suggested_message(self, suggested_message):
self._suggested_message = suggested_message
# define alarm behaviors
def text_alarm(message):
print(f"This is a Text alarm with message: {message}")
# define suggested messages
def evacuate_message():
return("Evacuate")
# define drills
class FireDrill(EmergencyDrillBase):
_suggested_message = evacuate_message()
_alarm_behavior = text_alarm()
name = "Fire Drill"
description = "Fire Drill Description"
def __init__(self):
super(FireDrill, self).__init__(FireDrill.name, FireDrill.description)
def sound_alarm(self):
self._alarm_behavior(self._suggested_message)
def mini_drill_simulator():
fire_drill = FireDrill()
fire_drill.sound_alarm()
if __name__ == "__main__":
mini_drill_simulator()
誰能發現我的錯誤在哪里?
預期結果:列印(“這是帶有訊息的文本警報:撤離”)
uj5u.com熱心網友回復:
我認為(至少)
_alarm_behavior = text_alarm()應該是_alarm_behavior = text_alarm并且
_suggested_message = evacuate_message()應該是_suggested_message = evacuate_message,然后方法應該被稱為FireDrill._suggested_messageand FireDrill._alarm_behavior。
所以一個問題是呼叫方法而不是僅僅參考它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524585.html
標籤:Python哎呀设计模式
上一篇:如何動態呼叫類方法?
