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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:00:00