为什么Python类不能识别静态变量
我试图用Python创建一个带有静态变量和方法(属性和行为)的类为什么Python类不能识别静态变量,python,class,oop,variables,static,Python,Class,Oop,Variables,Static,我试图用Python创建一个带有静态变量和方法(属性和行为)的类 当代码运行时,它说它无法使数组弹出,因为没有定义popSize您需要使用self.popSize或SimpleString.popSize访问它。当您在类中声明变量以便任何实例函数访问该变量时,您需要使用self或类名(在本例中为SimpleString),否则它会将函数中的任何变量视为该函数的局部变量 self和SimpleString之间的区别在于,使用self对popSize所做的任何更改都只会反映在实例的范围内,如果您创建
当代码运行时,它说它无法使数组弹出,因为没有定义popSize您需要使用
self.popSize
或SimpleString.popSize
访问它。当您在类中声明变量以便任何实例函数访问该变量时,您需要使用self
或类名(在本例中为SimpleString
),否则它会将函数中的任何变量视为该函数的局部变量
self
和SimpleString
之间的区别在于,使用self
对popSize
所做的任何更改都只会反映在实例的范围内,如果您创建另一个SimpleString
popSize
的实例,则仍然是1000
。如果使用SimpleString.popSize
,则对该变量所做的任何更改都将传播到该类的任何实例
import numpy
class SimpleString():
popSize = 1000
displaySize = 5
alphatbet = "abcdefghijklmnopqrstuvwxyz "
def __init__(self):
pop = numpy.empty(self.popSize, object)
target = getTarget()
targetSize = len(target)
您需要使用
self
或类对象来访问类属性:
def __init__(self):
pop = numpy.empty(self.popSize, object)
target = getTarget()
targetSize = len(target)
或
仅当您希望绕过具有相同名称的实例属性时,才需要后一种形式:
>>> class Foo(object):
... bar = 42
... baz = 42
... def __init__(self):
... self.bar = 38
... def printBar(self):
... print self.bar, Foo.bar
... def printBaz(self):
... print self.baz, Foo.baz
...
>>> f = Foo()
>>> f.printBar()
38 42
>>> f.printBaz()
42 42
这里的
self.bar
是一个实例属性(设置总是直接发生在对象上)。但是由于没有baz
实例属性,因此self.baz
将查找class属性。属性必须始终使用self
访问,例如self.popSize
或SimpleString.popSize
。。。。当它是静态类变量时。。。(如果您通过自我更改访问它,将不会反映回类变量)您拼错了字母表;-)语法:ftwNick,加入我的聊天室如果你想在一个类实例中修改它,并在其他类实例中看到反映的更改(如静态变量:P)@JoranBeasley:“静态变量”一词在这里真的放错地方了;Python有“类属性”和“实例属性”。是的,但是类属性的行为类似于其他语言中的静态变量(大多数情况下)。。。
def __init__(self):
pop = numpy.empty(SimpleString.popSize, object)
target = getTarget()
targetSize = len(target)
>>> class Foo(object):
... bar = 42
... baz = 42
... def __init__(self):
... self.bar = 38
... def printBar(self):
... print self.bar, Foo.bar
... def printBaz(self):
... print self.baz, Foo.baz
...
>>> f = Foo()
>>> f.printBar()
38 42
>>> f.printBaz()
42 42