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

调用类中datetime静态方法时报TypeError: 'datetime.datetime' object is not callable求助

报错原因分析

这个错误的核心是self.get_datetime此时已经是一个datetime.datetime类型的实例对象,而不是你定义的可调用的静态方法,你对它加了()调用,就会触发'datetime.datetime' object is not callable的错误。

最可能的诱因:Monkey Patch写法错误

你提到后续会对该方法做猴子补丁修改,大概率是补丁的写法出了问题:

  • 错误的补丁写法示例:
# 直接把get_datetime赋值成了datetime实例,而不是返回实例的函数
Boo.get_datetime = datetime.datetime(2024, 5, 20)

这种写法会直接覆盖原来的静态方法,导致self.get_datetime变成日期对象,调用时加括号就报错。

  • 正确的补丁写法应该保证get_datetime始终是可调用对象,因为原方法是静态方法,补丁也要对应处理:
# 写法1:用静态方法封装固定返回值
Boo.get_datetime = staticmethod(lambda: datetime.datetime(2024, 5, 20))

# 写法2:定义普通函数做补丁
def mock_get_datetime():
    return datetime.datetime(2024, 5, 20)
Boo.get_datetime = staticmethod(mock_get_datetime)

其他可能的诱因

  • 你在某个位置给Boo类的实例对象的get_datetime属性直接赋值了datetime实例,比如:
boo_inst = Boo()
boo_inst.get_datetime = datetime.datetime.today()

这种情况也会覆盖实例继承的类静态方法,触发调用报错。

快速排查方案

在do方法的调用行前加一行调试代码,确认get_datetime的类型:

def do(self):
    print(type(self.get_datetime), repr(self.get_datetime)) # 加这行调试
    name = f"hello/{self.get_datetime().strftime('%Y-%m-%d')}"

如果输出的类型是datetime.datetime,就可以确认是该属性被覆盖为日期实例了,直接搜索所有修改Boo.get_datetime或者实例get_datetime属性的代码修正即可。

内容的提问来源于stack exchange,提问作者caasswa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:01