反射

#!/usr/bin/env python
# -*- coding:utf-8 -*-
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 stoping....")
    def restart(self):
        self.stop()
        self.start()


def test_run(ins,name):            #把这个方法绑定到实例内,如下setattr例子是绑定到server实例内  setattr
    print("runing.,....",ins.host,name)


if __name__ =="__main__":
    server = WebServer("local",2222)
#    print(sys.argv[1])
    if hasattr(server,sys.argv[1]):         #判断有没有
        func = getattr(server,sys.argv[1])  # 获取server.start方法的内存地址
        func()                             #server.start()



    # setattr(server,"run",test_run)
    # server.run(server,"alex")


    delattr(WebServer,"start")
    print(server.restart())

    '''
    cmd_dic = {
        'start':server.start,
        "stop":server.stop

    }
    if sys.argv[1] in cmd_dic:
         cmd_dic[sys.argv[1]]()
             '''


#反射根据相应的字符串获取相应的内存地址

  

原文地址:https://www.cnblogs.com/dribs/p/5701077.html