代码之家  ›  专栏  ›  技术社区  ›  KansaiRobot

为什么在字典里不把booles理解为函数调用?

  •  -1
  • KansaiRobot  · 技术社区  · 3 年前

    我有以下几点

    class ShowOptions(Enum):
        MenuBBoxes =0
        Show_A = 1
        Show_B =2
        Show_C =3
        Show_D =4
    
    isShown = { ShowOptions.MenuBBoxes: True,
                ShowOptions.Show_A: True,
                ShowOptions.Show_B:True,
                ShowOptions.Show_C:True,
                ShowOptions.Show_D:True}
    

    我正在尝试切换布尔值的值,例如

    isShown[(h-1)]= not   isShown[(h-1)]
    

    但这给了我一个错误

    TypeError: 'NoneType' object is not callable
    

    我不明白为什么不能使用。 注意:如果我这样做

      isShown[(h-1)]= not (1==0)
    

    没有问题发生

    0 回复  |  直到 3 年前
        1
  •  1
  •   Henry Ecker Super Kai - Kazuya Ito    3 年前

    你的钥匙 dict Enum int 。你不能互换使用它们。如果你想从 字典 您需要使用 枚举 定义如下:

    from enum import Enum
    
    
    class ShowOptions(Enum):
        MenuBBoxes = 0
        Show_A = 1
        Show_B = 2
        Show_C = 3
        Show_D = 4
    
    
    isShown = {ShowOptions.MenuBBoxes: True,
               ShowOptions.Show_A: True,
               ShowOptions.Show_B: True,
               ShowOptions.Show_C: True,
               ShowOptions.Show_D: True}
    
    
    isShown[ShowOptions.MenuBBoxes] = not isShown[ShowOptions.MenuBBoxes]
    print(isShown)
    

    如果你想使用它们的值,你必须像这样调用枚举类型:

    isShown[ShowOptions(0)] = not isShown[ShowOptions(0)]
    print(isShown)
    

    我想你在找这样的东西:

    isShown[ShowOptions(h - 1)] = not isShown[ShowOptions(h - 1)]