【问题标题】:Quick object modification with dict in Python在 Python 中使用 dict 快速修改对象
【发布时间】:2018-10-05 03:51:26
【问题描述】:

我对编程很陌生,我正在尝试找到最有效的方法来迭代对象以在每次传递时更新它的状态。我以为我可以使用 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

【问题讨论】:

  • 您展示了您希望代码打印/执行的操作,而不是当前执行的操作。这可能会对回答者有所帮助。

标签: python dictionary switch-statement


【解决方案1】:

您不一定需要课程。您始终可以将所有坦克保存在字典中,并通过访问这些属性来更新/显示坦克的状态。

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'}}

然后您可以创建方法以根据您自己的逻辑以某些方式更新您的 dict。

希望这会有所帮助。

【讨论】:

  • 我从没想过我是否需要上课。谢谢!
【解决方案2】:

通过在每个循环中重新定义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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2012-04-25
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多