使用字典时类中出现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
相关产品推荐
相关产品推荐

