我正在阅读一本关于python的一些高级概念的书,遇到了以下代码块:
SECRET = 'this-is-a-secret'
class Error:
def __init__(self):
pass
err = Error()
print(err.__init__.__globals__["SECRET"])
user_input = '{error.__init__.__globals__[SECRET]}'
# Results in accessing the globals dictionary of the object and then the value of secret
print(user_input.format(error=err))
根据代码,我们可以通过使用 .format()
这让他们有点脆弱。我们如何才能仅访问 error
将{}块内部的部分替换为 err
对象
我看到的是 error
部分替换为我们刚才创建的对象。我们不需要完全替换字符串{}块中的内容吗?这个过程是如何进行的 .format()
工作
1条答案
按热度按时间t9eec4r01#
如果您查看字符串格式语法(https://docs.python.org/3/library/string.html#format-字符串语法)
error.__init__.__globals__[SECRET]
用户输入的一部分是field_name
及error
对应于arg_name
剩下的要么是attribute_name
或element_index
.所以里面的东西
{}
在您的用户输入中,是有效的语法str.format
. 当您为.format提供参数时,它将替换arg_name
仅部分,并且您不需要与花括号内的内容完全匹配。