我对编程还很陌生,我正在尝试找到最有效的方法来迭代对象,以便每次通过都更新其状态。我以为可以在Python 3.6中使用字典来运行对象中的代码。我希望看到输出如下:
Tank A is clean
dirty
Tank B is dirty
clean
,最后切换到坦克对象模式。为什么这样不起作用,从实例化容器中选择正确的def来运行的最有效方法是什么?
class Tank:
def __init__(self, mode, name):
self.mode = mode
self.name = name
def dirty(self):
print("%s is dirty"%(self.name))
self.mode = 'clean'
return self
def clean(self):
print("%s is clean"%(self.name))
self.mode = 'dirty'
return self
i = 0
tankList = []
tankList.append(Tank('clean', "Tank A"))
tankList.append(Tank('dirty', "Tank B"))
while i < 2:
#create the mode lookup
dict = {'clean': tankList[i].clean(), 'dirty': tankList[i].dirty()}
#update the tank mode
tankList[i] = dict[tankList[i].mode]
#display the tank mode
print(tankList[i].mode)
i += 1
答案 0 :(得分:0)
您不一定需要上课。您始终可以将所有战车存放在字典中,并通过访问这些属性来更新/显示战车的状态。
tanks = {}
tanks['tankA'] = {'name': 'Tank A', 'mode': 'clean'}
tanks['tankB'] = {'name': 'Tank B', 'mode': 'dirty'}
for t in tanks:
print('{} is {}'.format(tanks[t]['name'], tanks[t]['mode']))
print('updating Tank A mode...')
tanks['tankA']['mode'] = 'dirty'
for t in tanks:
print('{} is {}'.format(tanks[t]['name'], tanks[t]['mode']))
结果如下:
Tank A is clean
Tank B is dirty
updating Tank A mode...
Tank A is dirty
Tank B is dirty
字典看起来像这样:
{'tankA': {'name': 'Tank A', 'mode': 'dirty'}, 'tankB': {'name': 'Tank B', 'mode': 'dirty'}}
然后您可以根据自己的逻辑,创建以某些方式更新字典的方法。
希望这会有所帮助。
答案 1 :(得分:0)
通过在每个循环中重新定义dict
,您每次都在调用类方法,因此所有Tank
实例都以相同的mode
结尾。您可以通过简单的if...else...
而不是dict
来避免这种情况。
这将作为您的while
循环:
while i < 2:
if tankList[i].mode == 'dirty':
tankList[i].dirty()
elif tankList[i].mode == 'clean':
tankList[i].clean()
print(tankList[i].mode)
i += 1
根据需要输出:
Tank A is clean
dirty
Tank B is dirty
clean