[英]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
-即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)
要显示状态,请执行以下操作:
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.