今天首次接触这个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

 

 

 

 

 

 

posted on 2019-11-06 22:49  显示账号  阅读(180)  评论(0编辑  收藏  举报