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

在函数内添加Yuman类对象到全局列表时触发TypeError问题

解决TypeError: 'Yuman' object is not callable错误

问题根源在你reproduce函数里的两个for循环——你用类名Yuman作为了循环变量:

for Yuman in yumanList:

每次循环时,这个变量会被赋值为yumanList里的Yuman实例对象,直接覆盖了全局的Yuman类。等到后面你想创建新对象调用Yuman(...)时,实际是在尝试调用一个已经变成实例的变量,自然触发'Yuman' object is not callable错误。

修复方法

  1. 把循环变量改成和类名不同的名字(比如小写的yuman),避免覆盖类引用
  2. 删掉函数里多余的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:01:47