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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:01:17