可以在Python的一个类’方法中创建一个类变量吗?

Can a class variable be created inside one of the class' methods in Python?

关于发布在so上的以下问题,python-为什么在类中使用"self"?,我想知道:

如果我不使用"self."在给定类的方法中创建了一个变量,它会是一个类变量吗?如果不是这样,为什么不呢?

例如,如果我有一个这样的类:

1
2
3
class A:
    def somefunction(self):
        x=1

x是一个类变量吗?


实际上不是,因为x不是类变量——它是方法somefunction的局部变量。

类变量应在类体中准确定义:

1
2
3
4
5
class A:
    x = 1
    def somefunction(self):
        A.x += 1
        print A.x

顺便说一句:即使您定义了正确的类变量,您仍然可以得到输出:

1
2
2
2

因为在somefunction中,您分配了x=1,所以每次运行该函数时,x的运行值都会重置为1


不,你的假设是错误的。它是一个局部变量。


无论何时在Python函数中分配变量,默认情况下都是在最内层本地命名空间中创建的。除非显式声明变量,否则不会引用其他命名空间(如A类)中的变量。所以在代码中,您是在一个特定于该函数的本地命名空间中创建x,甚至不特定于A的实例,因为您没有将其声明为self.x。我相信这就是为什么你得到了2,2,而不是2,3