Python函数式策略模式实现报错:text_alarm缺少必要参数
错误原因定位与修复
核心错误点
在FireDrill类的定义中,这行代码是问题根源:
_alarm_behavior = text_alarm()
这里直接调用了text_alarm函数,但没有传入该函数必需的message参数,导致类加载阶段就触发TypeError。退一步说,就算强行传入参数,后续sound_alarm方法调用self._alarm_behavior(self._suggested_message)时,也会因为_alarm_behavior是函数调用的返回值(此处为None)而报错。
正确的逻辑是将函数本身赋值给_alarm_behavior,而非调用函数后的结果。
修复后的代码
修改FireDrill类的属性定义即可:
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)
验证结果
运行修改后的代码,会输出预期内容:
This is a Text alarm with message: Evacuate
内容的提问来源于stack exchange,提问作者xavi-pi
相关产品推荐
相关产品推荐

