python 反射
python 反射的核心本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!
反射的四个基本函数使用 hasattr,getattr,setattr,delattr
#!/usr/bin/python # coding=utf-8 import sys class Car(object): def __init__(self, name): self.name = name def start(self): print '%s start ...' % self.name def stop(self): print '%s stop ...' % self.name def restart(inst): print '%s start...' % inst.name print '%s stop...' % inst.name if __name__ == '__main__': car = Car("bmw") if hasattr(car, sys.argv[1]): # 判断属性是否存在 func = getattr(car, sys.argv[1]) # 获取属性 car.xx()内存地址 print '%s func call >>' % sys.argv[1] func() print 'setattr restart:restart func call >>' setattr(car, 'restart', restart) # 将函数绑定到实例对象 car.restart(car) print 'setarrt car.name >>' print 'car name:', car.name setattr(car, 'name', 'benz') # 修改实例对象属性值 print 'car name:', car.name print 'delattr restart:restart func call >>' delattr(car, 'restart') # 删除实例对象属性 try: car.restart(car) except Exception, e: print e
运行:
>>python oop_demo1.py start start func call >> bmw start ... setattr restart:restart func call >> bmw start... bmw stop... setarrt car.name >> car name: bmw car name: benz delattr restart:restart func call >> 'Car' object has no attribute 'restart'
用反射机制实现URL路由功能
一、目录结构
└─AutoMT │ urls.py │ __init__.py │ └─controller account.py commons.py __init__.py
二、代码实例
controller/account.py:
#!/usr/bin/python #coding=utf-8 def login(): print("这是一个登陆页面!") def logout(): print("这是一个退出页面!")
controller/commons.py:
#!/usr/bin/python #coding=utf-8 def home(): print("这是网站主页面!")
urls.py:
#!/usr/bin/python # coding=utf-8 def run(): inp = raw_input("请输入您想访问页面的url:").strip() try: modules, func = inp.split("/") try: obj = __import__("controller." + modules, fromlist=True) # 根据参数,动态的导入同名的模块,注意fromlist参数 if hasattr(obj, func): func = getattr(obj, func) func() else: print '404' except ImportError, e: print e except ValueError: print 'url不合规则,要求格式:controller/func' if __name__ == '__main__': while True: run()
运行结果:
>>python urls.py 请输入您想访问页面的url:account/login 这是一个登陆页面! 请输入您想访问页面的url:commons/home 这是网站主页面! 请输入您想访问页面的url:account/register 404 请输入您想访问页面的url:houtai/home No module named houtai 请输入您想访问页面的url:
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***