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