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测试开发圈”,了解更多测试教程!***