我想知道为什么私有属性不能使用eval()函数。 class A: def __init__(self): __private = 5 print(__private + 2) # Prints '7' print(eval('__private + 2')) # NameError: name '__private' is not defined A()
与名称混淆有关,请参阅文档:documentation:注意,传递给 exec() 或 eval() 的代码不认为调用类的类名是当前类;这类似于 global 语句的影响,其影响也仅限于一起编译的代码。对 getattr()、setattr() 和 delattr() 的引用以及直接引用 __dict__ 时也适用相同的限制。因此,要在 eval() 中正确使用私有变量,必须以混淆的形式传递,例如 print(eval('_A__private + 2'))。
print(eval('_A__private + 2'))
看起来有效。但__private
不是类级别的变量,是吗? - 001eval
有一个单独的范围或类似的东西。 - VPfB