self="animal"
print(eval(self).sound())可以
但是print(eval(self.sound()))不可以
print(eval(self + ".sound()"))可以
这是什么原因,eval用法
eval(self) → eval("animal") → 解析为变量 animal
获取 animal 对象
调用 .sound() 方法
关键点:eval() 返回的是 对象引用,然后在该对象上调用方法
self.sound() → 尝试在字符串 "animal" 上调用 .sound() 方法
字符串没有 .sound() 方法 → AttributeError
根本原因:在 eval() 执行前就发生了方法调用错误
self + ".sound()" → "animal.sound()"
eval("animal.sound()") → 解析并执行完整表达式
关键点:eval() 直接执行 完整的调用表达式