【问题标题】:Why can't call the dictionary's value with its key?为什么不能用它的键调用字典的值?
【发布时间】:2023-03-13 02:10:01
【问题描述】:

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

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'\\>"

那么如何用key调用mytest._instances中的值呢?

【问题讨论】:

    标签: python python-3.x dictionary


    【解决方案1】:

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

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

    即字典键是 mytest 的类,字典值是我的测试的特定实例

    所以你可以通过使用来获得价值:

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

    【讨论】:

      【解决方案2】:

      这不是一个字符串,它是一个类对象。

      你应该使用:

      mytest._instances[mytest]
      

      【讨论】:

        猜你喜欢
        • 2021-08-24
        • 2019-01-02
        • 1970-01-01
        • 2011-06-09
        • 2019-03-30
        • 1970-01-01
        • 1970-01-01
        • 2018-06-13
        • 2019-02-01
        相关资源
        最近更新 更多