如何将python字符串转换为属性或符号以进行分配?

时间:2013-09-19 10:29:44

标签: python mocking

所以基本上,我试图通过欺骗eval()来嘲笑。但它似乎在语法上不可行。好奇,如果有其他方式? (我很清楚python的模拟库,请不要建议,尽管他们使用任何1-5行技术来解决这个问题,但是很棒!)

>>> import os
>>> def func(*args, **kwargs):
...   print "Who knows?"
... 
>>> to_assign = 'os.getcwd'
>>> os.getcwd
<built-in function getcwd>
>>> eval('os.getcwd')
<built-in function getcwd>
>>> os.getcwd = func
>>> os.getcwd()
Who knows?
>>> eval('os.getcwd') = func
  File "<stdin>", line 1
SyntaxError: can't assign to function call

如上所示,os.getcwd和eval('os.getcwd')应该评估相同的内容,但如果eval位于语句的目标端,我无法进行赋值。

另外,我不能使用exec,因为我在带闭包的嵌套函数中使用它。

Python 2的解决方案更受欢迎,但如果存在Python 3的解决方案也很好。

谢谢, Chenz

1 个答案:

答案 0 :(得分:0)

您知道setattr吗?

setattr(os, "getcwd", func)

eval的结果是(就像来自任何其他函数的返回值一样),并且在Python中赋值是没有意义的。