今天首次接触这个eval函数,让我忧伤了一把。我把当成字符串拼接,结果错得天远地远。大致状况是下面这句代码,一个劲的给我报NameError: name 'qinfeng' is not defined.python
class_obj = eval('qinfeng.zheng.ipvsadm.%s()' % class_name)
当时,我就想,这尼玛一个字符串拼接,还须要定义的啥鬼。函数
后面百度了一把,发现自个有点瓜。测试
原来eval这一骚操做以后,class_obj就是一个对象实例,而当时就是没有引包。spa
下面模拟一下,便于之后复习,记心真是很给狗了。code
1. 代码结构以下对象
2. ipvsadm.pyblog
class Ipvs(): def say(self): print("我很蛋疼。。。")
3. 测试类 test.pyip
import qinfeng.zheng.ipvsadm if __name__ == '__main__': class_name = 'Ipvs' class_obj = eval('qinfeng.zheng.ipvsadm.%s()' % class_name) print(type(class_obj)) class_obj.say()
当把import qinfeng.zheng.ipvsadm注释掉,运行test.py就会报如下错误字符串
Traceback (most recent call last): File "E:/ws/python/20191106/qinfeng/zheng/test.py", line 5, in <module> class_obj = eval('qinfeng.zheng.ipvsadm.%s()' % class_name) File "<string>", line 1, in <module> NameError: name 'qinfeng' is not defined