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

Python中RandEvents类使用问题:调用随机事件触发AttributeError

问题分析

你遇到的AttributeError是因为直接调用未绑定的类方法导致的:

  • 当你把RandEvents.event1、RandEvents.event2放进列表时,这些是未绑定到具体实例的类方法,调用时传入的hero1会被当作方法里的self参数。
  • 但Hero类并没有hero属性,所以代码尝试访问self.hero.name时就会报错。
修复方案:绑定RandEvents实例

正确的做法是先创建RandEvents的实例(传入hero1),再把实例的绑定方法放进列表:

import random

class Hero:
    def __init__(self, name):
        self.name = name

hero1 = Hero('Bob')

class RandEvents:
    def __init__(self, hero):
        self.hero = hero

    def event1(self):
        print(f'>>> {self.hero.name} text 1 event! <<<')

    def event2(self):
        print(f'>>> {self.hero.name} text 2 event! <<<')

# 先创建RandEvents实例,绑定hero1
rand_events = RandEvents(hero1)
# 用实例的绑定方法填充列表
list_events = [rand_events.event1, rand_events.event2]
event = random.choice(list_events)
# 直接调用,无需传参(方法已绑定实例,self会自动指向rand_events)
event()
其他可选方案

如果希望事件方法更灵活,也可以把事件改成接受hero参数的静态方法:

import random

class Hero:
    def __init__(self, name):
        self.name = name

hero1 = Hero('Bob')

class RandEvents:
    @staticmethod
    def event1(hero):
        print(f'>>> {hero.name} text 1 event! <<<')

    @staticmethod
    def event2(hero):
        print(f'>>> {hero.name} text 2 event! <<<')

list_events = [RandEvents.event1, RandEvents.event2]
event = random.choice(list_events)
event(hero1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:25:31