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

Python类实例变量访问报错:如何在类b中访问类a定义的username变量?

解决AttributeError: type object 'a' has no attribute 'username'的问题

这个错误的核心原因很明确:你定义的username是类a的实例属性(绑定在self上,只有当a被实例化后才存在),但你却直接通过类a本身去访问它——类a本身并没有username这个属性,它的实例才有,所以自然会触发报错。

下面给你几种可行的解决方案,你可以根据自己的实际需求选择:

方案1:在类b中创建类a的实例后访问属性

如果类b需要自己生成一个a的实例来获取username,可以在b的__init__里先实例化a,再访问实例的属性:

class a():
    def __init__(self):
        self.username = "amirhossein"
        self.passwd = 1234

class b():
    def __init__(self):
        # 先创建a的实例
        a_instance = a()
        self.amir = a_instance.username
        print(self.amir)

b()

运行这段代码就会正常输出amirhossein。

方案2:把username改为类属性

如果username是所有a实例共享的固定值,不需要每个实例单独设置,那可以把它定义为类a的类属性,这样就能直接通过a.username访问:

class a():
    # 将username定义为类属性,属于类本身
    username = "amirhossein"
    def __init__(self):
        self.passwd = 1234

class b():
    def __init__(self):
        self.amir = a.username
        print(self.amir)

b()

这种方式适合属性值不随实例变化的场景。

方案3:将a的实例传入b的初始化方法

如果b需要和某个已经存在的a实例交互(比如这个a实例有自定义的username),可以把a的实例作为参数传给b的__init__:

class a():
    def __init__(self):
        self.username = "amirhossein"
        self.passwd = 1234

class b():
    def __init__(self, a_instance):
        self.amir = a_instance.username
        print(self.amir)

# 先创建a的实例,再传给b
my_a = a()
b(my_a)

这种方式灵活性最高,适合b依赖外部a实例的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:59:08