Python对象随机名称生成:Goblin对象命名报AttributeError如何解决
错误原因
- 继承逻辑错误:
Goblin类的__init__方法没有定义入参,且调用父类Entity的构造方法时没有传入必填的4个参数,会直接触发参数缺失报错 - 属性访问逻辑错误:代码中
print(Goblin.name)是尝试访问Goblin类本身的类属性,而name是你定义的实例属性,存储在每个生成的Goblin实例对象上,访问类本身自然会触发AttributeError - 额外小问题:父类
Entity的构造方法中attack_dmg = attack_dmg没有加self.前缀,这个值不会绑定到实例上,后续访问实例的attack_dmg会找不到属性 - 你之前给Goblin类加name属性会出现所有对象名称相同的问题,就是因为类属性是所有实例共享的,修改类属性所有实例的name都会一起变,不符合你随机生成每个实例名称的需求
修复后代码
import random max_enemies = 5 class Entity(): def __init__(self, name, max_hp, min_hp, attack_dmg): self.name = name self.max_hp = max_hp self.min_hp = min_hp self.attack_dmg = attack_dmg # 修复self前缀问题 class Goblin(Entity): def __init__(self, name): # 预设哥布林的基础数值,只把随机生成的name作为入参传入 super().__init__(name=name, max_hp=20, min_hp=1, attack_dmg=3) Enemies = [] def enemy_spawner(): for x in range(max_enemies): # 生成随机名称,可根据需求调整格式 random_name = f"哥布林_{random.randint(1, 10)}" Enemies.append(Goblin(random_name)) enemy_spawner() # 遍历实例列表访问每个实例的name属性 for goblin in Enemies: print(goblin.name)
关键修改说明
- 给
Goblin类的构造方法添加name入参,调用父类构造方法时补全哥布林的默认属性值,符合继承逻辑 - 打印时遍历存储实例的
Enemies列表,直接访问每个实例自身的name属性,不再访问Goblin类的属性 - 修复了父类
attack_dmg属性没有绑定到实例的问题
内容的提问来源于stack exchange,提问作者kouketsu
相关产品推荐
相关产品推荐

