今天首次接触这个eval函数,让我忧伤了一把。我把当成字符串拼接,结果错得天远地远。大体情况是下面这句代码,一个劲的给我报NameError: name 'qinfeng' is not defined.
class_obj = eval('qinfeng.zheng.ipvsadm.%s()' % class_name)
当时,我就想,这尼玛一个字符串拼接,还需要定义的啥鬼。
后面百度了一把,发现自个有点瓜。
原来eval这一骚操作之后,class_obj就是一个对象实例,而当时就是没有引包。
下面模拟一下,便于以后复习,记心真是很给狗了。
1. 代码结构如下
2. ipvsadm.py
class Ipvs(): def say(self): print("我很蛋疼。。。")
3. 测试类 test.py
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
日拱一卒无有尽,功不唐捐终入海