问题如下:
class A:
...
o = A()
o.a = 0
def f(o,a):
print(eval(o+'.'+a))
f('o','a') # AttributeError: 'str' object has no attribute 'a'
但是:
class A:
...
o = A()
o.a = 0
print(eval('o'+'.'+'a')) # 0
这是为什么呢?
问题如下:
class A:
...
o = A()
o.a = 0
def f(o,a):
print(eval(o+'.'+a))
f('o','a') # AttributeError: 'str' object has no attribute 'a'
但是:
class A:
...
o = A()
o.a = 0
print(eval('o'+'.'+'a')) # 0
这是为什么呢?
class A:
...
o=A()
o.a=0
def f(o1,a1):
print(eval(o1+'.'+a1))
# AttributeError: 'str' object has no attribute 'a'
f('o','a')
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
跟名字空间有关,
eval()
官方文档是这样的:其中有:
globals
: 全局名字空间locals
: 局部名字空间两个可选属性.如果这两个都不写,
eval
默认只能识别标准的builtins
模块.你定义的
f()
函数的局部名字空间不包含实例o
: