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

Python AttributeError求助:int对象无tim属性问题排查

问题分析与解决方案

看起来你这里有两个关键问题需要解决:一个是类初始化时的无限递归陷阱,另一个是导致AttributeError: 'int' object has no attribute 'tim'的变量冲突问题。咱们一步步来理清楚:

1. 核心陷阱:类__init__中的无限递归

你在TT类的构造方法里写了self.tim=[TT() for i in range(initial_population)],这会触发无限递归——每次创建一个TT对象时,它的__init__会立即生成initial_population个新的TT实例,而每个新实例又会重复这个过程,直到Python的递归栈被耗尽。这是一个典型的设计误区,绝对不能在类的构造方法里创建自身的实例列表。

修复方法:把实例列表移到类外部

修改TT类,只保留自身属性的初始化,移除内部的tim列表定义:

class TT(object):
    def __init__(self):
        self.fitness = 0
        self.tt_number = 0
        # 假设lecturer、days、clas、periods、subjects都是已提前定义的变量
        self.cube = [[[[[0 for i in range(lecturer)] 
                        for j in range(days)] 
                       for k in range(clas)] 
                      for l in range(periods)] 
                     for m in range(subjects)]
    
    def initialize_population(self):
        # 在这里实现你的初始化逻辑
        pass

然后在主代码中(而不是类内部)创建TT对象的列表:

# 假设initial_population是你定义的种群数量变量
tim = [TT() for i in range(initial_population)]

2. 为什么会出现'int' object has no attribute 'tim'?

这个错误说明你在代码中尝试访问一个整数类型变量的tim属性,而不是TT对象的。常见的原因是:

  • 你在主方法中不小心把tim变量赋值成了整数(比如tim = 0),之后又尝试访问tim.tim;
  • 循环变量名和tim列表重名,比如:
    # 错误示例:循环变量覆盖了tim列表
    for tim in range(10):
        tim.tim.initialize_population()  # 这里tim是循环的整数,不是TT列表
    

修复方法:避免变量名冲突

确保循环使用不同的变量名,正确访问tim列表中的TT对象:

# 单层循环调用示例
for tt_obj in tim:
    tt_obj.initialize_population()

# 多层循环调用示例(如果tim是嵌套列表)
for group in tim:
    for tt_obj in group:
        tt_obj.initialize_population()

总结

  1. 永远不要在类的构造方法中创建自身实例的列表,避免无限递归;
  2. 检查主代码中的变量名,不要让循环变量或其他变量覆盖你的TT对象列表;
  3. 确保调用方法时,访问的是tim列表中的TT实例,而不是整数或其他类型的变量。

内容的提问来源于stack exchange,提问作者Hitesh Firake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:28:54