You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么在Python中无法对私有属性使用eval()函数?

问题原因解析

这个问题本质是Python的双下划线名称改写机制和eval的执行特性共同导致的,和eval本身能不能访问私有属性没有直接关联:

  • 首先,Python会在编译阶段对类内部所有以双下划线开头、且不以双下划线结尾的标识符做名称改写,改写规则为_类名__原标识符。你示例代码里__init__方法中的__private符合改写规则,所以代码编译完成后,这个局部变量的实际名称已经被替换为_A__private。你直接写__private + 2的时候,解释器会自动匹配改写后的名称,所以可以正常取值计算。
  • 其次,eval执行的字符串表达式是运行期才会交给解析器处理的,此时不会再触发当前类的名称改写逻辑,eval会直接查找字面量名称__private,而当前作用域里只有改写完成的_A__private,自然就会抛出NameError。

你可以做个简单验证:把eval对应的行改成print(eval('_A__private + 2')),就能正常输出7,完全符合上述逻辑。

内容的提问来源于stack exchange,提问作者Miłosz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:24:04