Python面向对象编程中为什么类属性无法访问全局变量?

运行如下代码:

class A():
    a=1
    b=d
    def __init__(self):
        self.c=d
    def info(self):
        print(A.b)

if __name__ == '__main__':
    d=2
    A().info()

运行结果显示:NameError: name 'd' is not defined
但是info方法中输出self.c就可以正常运行

因为一个是类变量啊,你的c是在执行A()时才赋值的,这个时候你main里定义了b,这就类似于闭包啊。类变量在你定义类的时候就赋值了,如果这个时候你没定义这个变量就肯定会报错啊

首先NameError: name 'd' is not defined,是说d没有定义,你d不管是在class A的init函数里还是在if里面的main里面,都是属于局部变量。
如果你要把d定义为全局变量,那把d移到if外面,而且要放在classA的定义上面

如果你是想要方位A类里面的b,那么就要使用self.b去调用。