You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:30:33