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

使用字典时类中出现AttributeError:'My_Data'对象无'Other'属性的修复

错误原因及修复方法

问题1:My_Data类构造函数仅做类型注解未赋值

你的My_Data类__init__方法里只写了属性的类型注解,但没有将传入的参数赋值给实例属性,导致实例实际不存在Other这类属性。

问题2:变量名错误

创建My_Data实例后,变量名为Data,但你却把未定义的info存入字典,不仅会引发NameError,还会导致字典里的对象根本不是My_Data实例。

问题3:嵌套结构不合理

将My_Data类和function1函数嵌套在__init__方法内部,会导致作用域混乱,既不利于代码维护,也可能引发调用问题。


修复后的完整代码

import tkinter as tk

class Page1(tk.Frame):
    def __init__(self, master, other, **kw):
        super().__init__(master, **kw)
        self.configure(bg='white')

    # 将My_Data类移到Page1内部作为嵌套类(也可直接放到全局作用域)
    class My_Data:
        def __init__(self, Name, Year, Other):
            # 同时完成属性赋值与类型注解
            self.Name: str = Name
            self.Year: float = Year
            self.Other: list = Other
            
    def function1(self):
        My_Dictionary = {}
        # 假设cursor已提前定义并连接数据库
        x = cursor.execute("sql")

        for row in x.fetchall():
            if row[0] not in My_Dictionary:
                # 修正变量名,将正确的My_Data实例存入字典
                data = self.My_Data(
                    Name=row[1],
                    Year=row[2],
                    Other=list())

                My_Dictionary[row[0]] = data
            # 现在可正常访问Other属性并追加元素
            My_Dictionary[row[0]].Other.append(row[3])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:53:01