以下代码对我不起作用。
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.所以我认为循环没有正确迭代。
任何人都知道什么是错的?
答案 0 :(得分:6)
你不需要;
- 这不是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
答案 1 :(得分:5)
Python不是Java。循环很好,问题就是班级。
state
是一个类变量,而不是实例变量。它由类的所有实例共享。而你实际上根本没有实例化这个类。
请改为:
class stateClass(object):
def __init__(self):
self.state = 0
states.append(stateClass())
你不需要分号。