繁体   English   中英

Python循环似乎没有迭代

[英]Python loop seems not to be iterating

下面的代码不符合我的预期。

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。所以我认为循环没有正确地迭代。

有人知道怎么了吗?

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

class stateClass: 
    state = 0 

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

您要在列表中附加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)

要显示状态,请执行以下操作:

print Hawaii.state

如果您想要一个property以便避免从类外部进行显式设置,则:

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

Python不是Java。 循环很好,问题出在类上。

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

改为这样做:

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

states.append(stateClass())

而且您不需要分号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM