文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python学习之反射

2023-01-31 01:31

关注

python学习反射


实例1

脚本内容如下:

#coding: utf8


class myClass(object):

    def fax(self):

        print 'faxing....'

    def copy(self):

        print 'copying...'


def printing():

    print 'printing....'


m = myClass()

if hasattr(m,'fax'):          #判断myClass类中是否有fax方法

    func = getattr(m,'fax')    #返回内存对象

    func()                #调用

setattr(m,'print2',printing)

m.print2()



try:

    #delattr(m,'copy')

    #print name

    #print dfdf

    #print tttt

    print m

except AttributeError,e:

    print 'something wrong..',e


except Exception,e:

    print e


finally:

    print '-----------'

#else:

#    print "print nothing wrong ...."

执行脚本结果如下:

faxing....

printing....

<__main__.myClass object at 0x028211D0>

-----------


实例2

脚本内容如下:

#/usr/bin/env python

#coding: utf8


import sys


class WebServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


if __name__ == "__main__":

     server = WebServer('localhost',80)

     #print sys.argv[1]

     cmd_dic = {

        'start':server.start,

        'stop':server.stop,

        'restart':server.restart,

     }

    #if sys.argv[1] == 'start':

     if sys.argv[1] in cmd_dic:

        cmd_dic[sys.argv[1]]()

执行脚本结果如下:

D:\Python学习\脚本学习>python 反射01.py start

Server is starting...


修改上面的脚本如下:

#/usr/bin/env python

#coding: utf8


import sys


class WebServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


if __name__ == "__main__":

     server = WebServer('localhost',80)

     if hasattr(server,sys.argv[1]):

         func = getattr(server,sys.argv[1])   ##获取server.start的内存地址

         func()     ##相当于server.start()

执行脚本结果如下:

D:\Python学习\脚本学习>python 反射02.py start

Server is starting...


D:\Python学习\脚本学习>python 反射02.py stop

Server is stopping...


修改上面的脚本如下:

#/usr/bin/env python

#coding: utf8


import sys


class WebServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


def test_run(name):

    print "running...",name


if __name__ == "__main__":

     server = WebServer('localhost',80)

     if hasattr(server,sys.argv[1]):

         func = getattr(server,sys.argv[1])   ##获取server.start的内存地址

         func()     ##相当于server.start()


     setattr(server,'run',test_run)  ##test_run以run身份绑定到server实例中

     server.run('peng')       ##类似执行test_run('peng')


执行脚本结果如下:

D:\Python学习\脚本学习>python 反射03.py start

Server is starting...

running... peng


修改上面的脚本如下:

#/usr/bin/env python

#coding: utf8


import sys


class WebServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


def test_run(self,name):

    print "running...",name,self.host


if __name__ == "__main__":

     server = WebServer('localhost',80)

     if hasattr(server,sys.argv[1]):

         func = getattr(server,sys.argv[1])   ##获取server.start的内存地址

         func()     ##相当于server.start()


     setattr(server,'run',test_run)  ##test_run以run身份绑定到server实例中

     server.run(server,'peng')       ##类似执行test_run('peng')

执行脚本结果如下:

D:\Python学习\脚本学习>python 反射04.py start

Server is starting...

running... peng localhost


修改上面的脚本如下:

#/usr/bin/env python

#coding: utf8


import sys


class WebServer(object):

     def __init__(self,host,port):

         self.host = host

         self.port = port


     def start(self):

         print "Server is starting..."


     def stop(self):

        print "Server is stopping..."


     def restart(self):

        self.stop()

        self.start()


def test_run(self,name):

    print "running...",name,self.host


if __name__ == "__main__":

     server = WebServer('localhost',80)

     if hasattr(server,sys.argv[1]):

         func = getattr(server,sys.argv[1])   ##获取server.start的内存地址

         func()     ##相当于server.start()


     delattr(WebServer,'start')

     print server.restart()



     #setattr(server,'run',test_run)  ##test_run以run身份绑定到server实例中

     #server.run(server,'peng')       ##类似执行test_run('peng')

执行脚本结果如下:

D:\Python学习\脚本学习>python 反射05.py restart

Server is stopping...    ---》执行的是func()的调用

Server is starting...    ---》执行的是func()的调用

Server is stopping...    ---》执行的是server.restart()的调用

Traceback (most recent call last):

  File "反射05.py", line 31, in <module>

    print server.restart()

  File "反射05.py", line 19, in restart

    self.start()

AttributeError: 'WebServer' object has no attribute 'start' ---》执行的是server.restart()的调用,此时start已经删除,所以报了“'WebServer' object has no attribute 'start'”错误!!!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯