Python循环似乎没有迭代

2024-10-03 02:42:13 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码对我来说不是预期的。你知道吗

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

if conditional第二次失败,尽管它是数组中的另一个索引,因此s.state应该初始化为0。所以我认为循环没有正确地迭代。你知道吗

有人知道怎么了吗?你知道吗


Tags: 代码inforifdefarraylengthclass
2条回答

Python不是Java。循环很好,问题是类。你知道吗

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

请改为:

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

states.append(stateClass())

你不需要分号。你知道吗

你不需要;的-这不是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

相关问题 更多 >