是否可以在类';Python中的方法?

是否可以在类';Python中的方法?,python,Python,谈到SO上发布的以下问题,我想知道: 如果我在给定类的方法中创建了一个变量而没有使用“self”,它会是一个类变量吗?如果不是这样,为什么不呢 例如,如果我有一个这样的类: class A: def somefunction(self): x=1 x是一个类变量吗?实际上不是。因为x不是类变量-它是方法somefunction的局部变量 应在类主体中准确定义: class A: x = 1 def somefunction(self):

谈到SO上发布的以下问题,我想知道:

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

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

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

x是一个类变量吗?

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

应在类主体中准确定义:

class A:
    x = 1
    def somefunction(self):
        A.x += 1
        print A.x
顺便说一句:即使您正确定义了classvariable,您仍然会得到输出:

2
2

因为在
somefunction
中,您正在分配
x=1
,所以每次运行此函数时,
x
的值将重置为
1
:)

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

应在类主体中准确定义:

class A:
    x = 1
    def somefunction(self):
        A.x += 1
        print A.x
顺便说一句:即使您正确定义了classvariable,您仍然会得到输出:

2
2

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

每当您在Python函数中分配变量时,默认情况下都会在最内部的本地名称空间中创建该变量。除非显式声明,否则不能引用其他命名空间中的变量(如
a
类)。因此,在您的代码中,您正在本地名称空间中创建
x
,该名称空间特定于该函数-甚至不特定于
a
的实例,因为您没有将其声明为
self.x
。我相信这就是为什么在Python函数中分配变量时,会得到
2,2
而不是
2,3

,默认情况下,它是在最内部的本地名称空间中创建的。除非显式声明,否则不能引用其他命名空间中的变量(如
a
类)。因此,在您的代码中,您正在本地名称空间中创建
x
,该名称空间特定于该函数-甚至不特定于
a
的实例,因为您没有将其声明为
self.x
。我相信这就是为什么你得到的是
2,2
而不是
2,3

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

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

您应该阅读。您应该阅读。我应该将我的问题改为“可以在方法中创建类变量吗?”可能是的,很可能是的。实际上,在谷歌搜索之前,你不应该问问题。不,当然我已经搜索过了,但是根据我从你的回答/评论中获得的附加信息,这个问题可以重新表述为更简洁和有意义。你的更改使我的答案变得混乱:(哦,对不起..但是我认为你的回答很有道理,除了解释我的示例的最后几行,我已经删除了。正如你所指出的,函数被多次调用,所以变量被重置/重新创建,我认为还有另一个原因它不起作用,那就是因为x是不可变的,所以在我看来它会在这个问题上,我应该把我的问题改为“类变量可以在方法中创建吗?”可能…,很可能是的。在谷歌搜索之前,你实际上不应该提问。不,我当然已经搜索过了,但根据我从你的回答/评论中获得的附加信息,这个问题可以重新表述为更简洁、更有意义。你的更改使我的答案变得混乱:(哦,对不起..但是我认为你的回答很有道理,除了解释我的示例的最后几行,我已经删除了。正如你所指出的,函数被多次调用,所以变量被重置/重新创建,我认为还有另一个原因它不起作用,那就是因为x是不可变的,所以在我看来它会把它放在这个问题上会让人困惑。