前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python学习之反射

python学习之反射

作者头像
py3study
发布2020-01-14 15:04:46
3680
发布2020-01-14 15:04:46
举报
文章被收录于专栏:python3python3

python学习反射

实例1

脚本内容如下:

代码语言:javascript
复制

#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

脚本内容如下:

代码语言:javascript
复制
#/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...

修改上面的脚本如下:

代码语言:javascript
复制
#/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...

修改上面的脚本如下:

代码语言:javascript
复制
#/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

修改上面的脚本如下:

代码语言:javascript
复制
#/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

修改上面的脚本如下:

代码语言:javascript
复制
#/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'”错误!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档