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

Python中super()结合Enum参数失效的技术问题咨询

问题根源:方法名拼写错误

你遇到的问题其实是个非常容易犯的小笔误——LogEvent类里的初始化方法名字写错了!

你写的是:

def __int__(self):

但正确的实例初始化方法应该是__init__(两个下划线+init+两个下划线),而__int__是Python用来实现对象转int类型的特殊方法,根本不会在实例化对象时自动调用。

详细拆解

当你创建LogEvent()实例时,Python会自动寻找类中的__init__方法完成初始化。但你的LogEvent类里没有正确定义这个方法,所以它会直接继承父类Event的__init__,而父类默认把type_设为None,这就是为什么打印结果是None。

反观TimerEvent类,它的__init__方法拼写完全正确,所以能正常调用父类的初始化逻辑,传入EventType.TIMER_EVENT,自然能得到正确结果。

修正后的代码

把LogEvent里的__int__改成__init__就能解决问题:

from enum import Enum
EventType = Enum('EventType', ('TIMER_EVENT', 'LOG_EVENT'))
class Event(object):
    def __init__(self, type_=None):
        self.type_ = type_
class LogEvent(Event):
    def __init__(self):  # 修正方法名
        super(LogEvent, self).__init__(EventType.LOG_EVENT)
class TimerEvent(Event):
    def __init__(self):
        super(TimerEvent, self).__init__(EventType.TIMER_EVENT)
print(LogEvent().type_)  # 现在会输出EventType.LOG_EVENT
print(TimerEvent().type_)  # 输出EventType.TIMER_EVENT

小提醒

Python里这类双下划线包裹的特殊方法(比如__str__、__repr__)名字一定要记准,拼写错误会导致方法无法被Python自动触发,出现各种看似“莫名其妙”的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:21:09