Eoi*_*ray 0 python loops if-statement
以下代码对我不起作用.
class stateClass:
state = 0
states = []
states.append(stateClass)
states.append(stateClass)
def populateStates(states):
for s in states:
if s.state == 0
print 'populating'
s.state = 1
populateStates(states)
Run Code Online (Sandbox Code Playgroud)
输出是
states array length: 2
populating
Run Code Online (Sandbox Code Playgroud)
这是第二次失败
for s in states:
if s.state == 0
Run Code Online (Sandbox Code Playgroud)
如果条件是第二次失败,虽然它是数组中的不同索引,因此s.state应该已经初始化为0.所以我认为循环没有正确迭代.
谁知道什么是错的?
你不需要;的 - 这不是C和co.等等...
class stateClass:
state = 0
Run Code Online (Sandbox Code Playgroud)
在这里你创建一个class level attribute- 即,state由所有实例共享stateClass.
您将附加到列表stateClass本身 - 即类的定义,而不是类的实际实例...
只要您更改state其中一个,stateClass现在所有实例都会更改该值.
您最有可能想要创建实例:
class State(object):
def __init__(self, number):
self.state = number
Hawaii = State(50)
Kentucky = State(23) # (making state numbers up here...)
my_states = []
my_states.append(Hawaii)
my_states.append(Kentucky)
Run Code Online (Sandbox Code Playgroud)
然后显示状态,执行以下操作:
print Hawaii.state
Run Code Online (Sandbox Code Playgroud)
如果你想要它,property那么它可以避免从课外进行显式设置:
class State(object):
def __init__(self, number):
self._state = number
@property
def state(self):
return self._state
Run Code Online (Sandbox Code Playgroud)
Python不是Java.循环很好,问题是类.
state是一个类变量,而不是实例变量.它由类的所有实例共享.而你实际上根本没有实例化这个类.
改为:
class stateClass(object):
def __init__(self):
self.state = 0
states.append(stateClass())
Run Code Online (Sandbox Code Playgroud)
而且你不需要分号.