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

为什么不能用它的键调用字典的值?

  •  0
  • showkey  · 技术社区  · 4 年前

    我们可以使用字典中的键调用该值。

    class mymodel(type):
        _instances = {}
        def __call__(cls, *args, **kwargs):
            if cls not in cls._instances:
                cls._instances[cls] = super().__call__(*args, **kwargs)
            return cls._instances[cls]
    
    class mytest(object,metaclass=mymodel):
        pass
    

    检查其属性。

    mytest._instances
    {}
    

    呼叫 mytest 第一次让它包含属性 _instances .

    mytest()
    <__main__.mytest object at 0x7f3286774b20>
    mytest._instances
    {<class '__main__.mytest'>: <__main__.mytest object at 0x7f3286774b20>}
    type(mytest._instances)
    <class 'dict'>
    mytest._instances.keys()
    dict_keys([<class '__main__.mytest'>])
    

    使用键调用其值:

    mytest._instances[<class '__main__.mytest'>]
      File "<stdin>", line 1
        mytest._instances[<class '__main__.mytest'>]
                          ^
    SyntaxError: invalid syntax
    mytest._instances["<class '__main__.mytest'>"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: "<class '__main__.mytest'>"
    

    试着用反斜杠逃跑 \ :

    mytest._instances[\<class '__main__.mytest'\>]
      File "<stdin>", line 1
    SyntaxError: unexpected character after line continuation character
    mytest._instances["\<class '__main__.mytest'\>"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: "\\<class '__main__.mytest'\\>"
    

    mytest._instances 用钥匙吗?

    2 回复  |  直到 4 年前
        1
  •  1
  •   U13-Forward    4 年前

    这不是字符串,而是类对象。

    你应使用:

    mytest._instances[mytest]
    
        2
  •  1
  •   QuantumMecha    4 年前

    当您查看mytest.\u实例时,它会向您显示字典包含的内容:

    mytest._instances
        {<class '__main__.mytest'>: <__main__.mytest object at 0x7f3286774b20>}
    

    i、 e.dictionary键是mytest的类,dictionary值是mytest的特定实例

    因此,您可以使用以下方法获取值:

    mytest._instances[mytest]
        <__main__.mytest object at 0x7f3286774b20>