在函数内添加Yuman类对象到全局列表时触发TypeError问题
解决TypeError: 'Yuman' object is not callable错误
问题根源在你reproduce函数里的两个for循环——你用类名Yuman作为了循环变量:
for Yuman in yumanList:
每次循环时,这个变量会被赋值为yumanList里的Yuman实例对象,直接覆盖了全局的Yuman类。等到后面你想创建新对象调用Yuman(...)时,实际是在尝试调用一个已经变成实例的变量,自然触发'Yuman' object is not callable错误。
修复方法
- 把循环变量改成和类名不同的名字(比如小写的
yuman),避免覆盖类引用 - 删掉函数里多余的
global Yuman声明(你不需要修改全局的Yuman类,这个声明反而会让变量覆盖的问题更隐蔽)
修改后的关键代码片段:
def reproduce() -> None: # 移除多余的 global Yuman 声明 # ...其他代码保持不变... # 获取父代雄性特征的循环,修改循环变量名 while (_daddyTrait == "Unassigned"): for yuman in yumanList: # 将Yuman改为yuman if yuman.Breeded == False: if yuman.Sex == 1: _daddyTrait: str = yuman.Trait yuman.Breeded = True # 获取父代雌性特征的循环,同样修改循环变量名 while (_mommyTrait == "Unassigned"): for yuman in yumanList: # 将Yuman改为yuman if yuman.Breeded == False: if yuman.Sex == 2: _mommyTrait: str = yuman.Trait yuman.Breeded = True # ...后续创建新对象的代码无需修改,此时Yuman仍指向类... for i in range(_childAmount): yumanList.append( Yuman(_traitAssigner(), (random.randint(1, 2)), False))
为什么之前的尝试无效?
你提前存_yuman = Yuman的操作之所以失效,是因为后面的for循环还是会覆盖全局的Yuman变量,而你创建对象时用的还是被覆盖后的Yuman。只有彻底避免用类名当循环变量,才能解决根本问题。
内容的提问来源于stack exchange,提问作者aaqqyyuxxl
相关产品推荐
相关产品推荐

