Python循环似乎不是迭代

时间:2012-09-10 10:51:01

标签: 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)

输出

states array length: 2
populating

这是第二次失败

for s in states:
  if s.state == 0

如果条件是第二次失败,尽管它是数组中的不同索引,因此s.state应该已初始化为0.所以我认为循环没有正确迭代。

任何人都知道什么是错的?

2 个答案:

答案 0 :(得分:6)

你不需要; - 这不是C和co。等...

class stateClass: 
    state = 0 

在这里,您要创建一个class level attribute - 即statestateClass的所有实例共享。

您将附加到列表stateClass本身 - 即类的定义,而不是类的实际实例...

只要您更改其中一个statestateClass的所有实例现在都会更改该值。

您最有可能想要创建实例:

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)

然后显示状态,执行以下操作:

print Hawaii.state

如果你想要一个property,那么它可以避免在课外进行明确的设置:

class State(object):
    def __init__(self, number):
        self._state = number
    @property
    def state(self):
        return self._state

答案 1 :(得分:5)

Python不是Java。循环很好,问题就是班级。

state是一个类变量,而不是实例变量。它由类的所有实例共享。而你实际上根本没有实例化这个类。

请改为:

class stateClass(object):
  def __init__(self):  
    self.state = 0

states.append(stateClass())

你不需要分号。