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
相关产品推荐
相关产品推荐

