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

2024-05-15 17:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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中的值呢


Tags: instancesinobjectmaintypestdinlineargs
2条回答

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

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

也就是说,dictionary键是mytest的类,dictionary值是mytest的特定实例

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

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

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

你应使用:

mytest._instances[mytest]

相关问题 更多 >