Gre*_*reg 17 python variables class function
这两个代码块都可以工作.有没有"正确"的方法来做到这一点?
class Stuff:
def __init__(self, x = 0):
global globx
globx = x
def inc(self):
return globx + 1
myStuff = Stuff(3)
print myStuff.inc()
Run Code Online (Sandbox Code Playgroud)
打印"4"
class Stuff:
def __init__(self, x = 0):
self.x = x
def inc(self):
return self.x + 1
myStuff = Stuff(3)
print myStuff.inc()
Run Code Online (Sandbox Code Playgroud)
还打印"4"
我是一个菜鸟,我在课堂上处理很多变量.开始想知道为什么我把"自我".在一切可见的面前.
谢谢你的帮助!
Joh*_*ooy 12
你应该使用第二种方式,然后每个实例都有一个单独的 x
如果您使用全局变量,那么当您有多个实例时,您可能会发现获得惊人的结果,Stuff
因为更改一个实例的值会影响所有其他实例.
在Python代码中拥有明确的self是很正常的.如果您试图避免这种情况,那么您将难以为其他Python程序员阅读代码(并可能引入额外的错误)
"类范围变量"有两种方法.一种是使用self
,这称为实例变量,一个类的每个实例都有自己的实例变量副本; 另一个是在类定义中定义变量,这可以通过以下方式实现:
class Stuff:
globx = 0
def __init__(self, x = 0):
Stuff.globx = x
...
Run Code Online (Sandbox Code Playgroud)
这称为类属性,可以Stuff.globx
由类直接访问,并由类拥有,而不是类的实例,就像Java中的静态变量一样.
你不应该global
为"类范围变量" 使用语句,因为它不是.声明为global
全局作用域中的变量,例如定义类的模块的名称空间.