Python中如何基于同一类生成多个ID互不相同的实例?
你当前代码的核心问题是没有实例化类,直接将entity类本身赋值给了player和enemy,两个变量指向同一个类对象,修改属性会互相覆盖,自然无法获得独立的ID和属性。
可行实现方案
- 给
entity类添加构造方法,将原本的类属性改为实例属性,新增类级别的计数器来自动生成唯一实例ID - 实例化类的时候添加括号
()生成独立的实例对象
修正后代码:
class Entity: # 类变量,用来记录实例数量,生成唯一ID _id_counter = 0 def __init__(self): # 每次实例化自动分配唯一ID Entity._id_counter += 1 self.id = Entity._id_counter # 实例属性,每个实例独立拥有 self.name = "0" self.health = 100 self.strength = 10 # 注:原代码的strenght为拼写错误,此处修正 self.speed = 10 self.xp = 0 self.energy = 100 # 实例化生成独立对象 player = Entity() player.name = input("Enter your name: ").strip() print(f"Welcome, {player.name}. 你的ID是:{player.id}") enemy = Entity() enemy.name = "Some Enemy" enemy.strength = 5 enemy.speed = 20 enemy.xp = 100 print(f"敌人名称:{enemy.name},敌人ID是:{enemy.id}") # 验证两个实例属性独立 print(f"玩家力量值:{player.strength},敌人力量值:{enemy.strength}")
效果说明
- 每个
Entity实例都会自动生成全局唯一的自增ID,不会重复 - 所有属性都是每个实例独立持有,修改
player的属性不会影响enemy的属性 - 可以通过
isinstance(player, Entity)、isinstance(enemy, Entity)验证二者都归属于Entity类
内容的提问来源于stack exchange,提问作者Welder22
相关产品推荐
相关产品推荐

