Python类__init__中拼接字符串变量时出现属性错误的求助
解决USR类初始化时的AttributeError问题
问题背景
我正在编写一个名为USR的类,用于存储命令行电商平台用户的账户信息(大学小组项目,组员懈怠需独自完成)。USR类代码如下:
import os class USR: def __init__(self,N,a,g,Uname,Pwd,Addr,CC): Name = N age = a gender = g Username = Uname Password = Pwd Address = Addr CCinfo = CC UserCart = os.getcwd() + self.Username + "_UC.csv" OrderHistory = os.getcwd() + self.Username +"_OH.csv"
预期UserCart和OrderHistory为字符串,创建用户实例时拼接当前目录、实例Username及后缀生成文件路径。
测试代码:
print("testing USR init") Usr = UserClass.USR("Andrew", 69,"Other","idk",1234,"some house",1234567891012131) print(Usr.UserCart) print(Usr.OrderHistory)
在Win10系统运行时出现错误:
line 12, in __init__, UserCart = os.getcwd() + self.Username + "_UC.csv" AttributeError: 'USR' object has no attribute 'Username'
尝试改用self.Name也出现相同错误,寻求解决建议。
错误原因
你在__init__方法里定义的Name、Username等变量都是局部变量,没有绑定到实例对象上,所以用self.Username访问时会提示找不到该属性。同时,UserCart和OrderHistory同样是局部变量,外部无法通过实例访问到。
修正方案
需要把所有需要在实例中保留的变量都定义为实例属性,即加上self.前缀;另外推荐用os.path.join()拼接路径,避免不同操作系统的路径分隔符问题(Windows用\,Linux用/)。
修正后的代码:
import os class USR: def __init__(self, N, a, g, Uname, Pwd, Addr, CC): # 将变量绑定为实例属性 self.Name = N self.age = a self.gender = g self.Username = Uname self.Password = Pwd self.Address = Addr self.CCinfo = CC # 使用os.path.join拼接路径,兼容多系统 self.UserCart = os.path.join(os.getcwd(), f"{self.Username}_UC.csv") self.OrderHistory = os.path.join(os.getcwd(), f"{self.Username}_OH.csv")
测试验证
运行原测试代码,现在可以正常输出文件路径,且能通过实例访问UserCart和OrderHistory属性。
内容的提问来源于stack exchange,提问作者Andrew B
相关产品推荐
相关产品推荐

