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测试开发圈”,了解更多测试教程!***
python 反射的更多相关文章
- python反射
python反射 python的反射是基于字符串的形式去对象(模块)中操作其成员.此操作是动态的,常用于web开发中url参数中对应模块或者函数的反射. 下面开始具体说明: 场景需求: 我的pytho ...
- Python反射机制理解
Python反射机制用沛齐老师总结的话说就是:利用字符串的形式去对象(模块)中操作(寻找)成员. getattr(object, name) object代表模块,name代表模块中的属性或成员,该函 ...
- 小学生绞尽脑汁也学不会的python(反射)
小学生绞尽脑汁也学不会的python(反射) 1. issubclass, type, isinstance issubclass 判断xxxx类是否是xxxx类的子类 type 给出xxx的数据类型 ...
- Python反射和内置方法(双下方法)
Python反射和内置方法(双下方法) 一.反射 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发 ...
- python反射问题
python中的__import__是以字符串的形式反射导入模块并以字符串的形式执行函数
- python 反射的使用
反射这个功能在很多编程语言中都有,在Python中自然也不例外.其实编程语言中的很多功能都能用简单的代码来验证. 在code代码之前,先简单的了解下反射的几个属性. hasattr(obj,name_ ...
- python 反射调用
因为目前在写一个python的项目,用到了Python的反射机制,所以做一下笔记,把写项目过程中的感悟记下来. 先简单介绍下Demo用到的函数: sys.path 是python的模块的路径集,是一个 ...
- python反射机制深入分析
对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述pyth ...
- python反射和面向对象的知识并简述基本的异常
# 1.面向对象不是所有的情况都适用# 2.面向对象编程# a.定义类# class Foo:# def 方法1(self,bb):# b.根据类创建对象(创建) # class Person():# ...
随机推荐
- ffmpeg 安装,转视频格式为m3u8,压缩视频
# ffmpegffmpeg 安装,转视频格式为m3u8,压缩视频 ## ffmpeg 安装直接安装: apt-get install ffmpeg 运行 `ffmpeg` 看是否出现版本号以判断是否 ...
- Java中的关键字 transient
先解释下Java中的对象序列化 在讨论transient之前,有必要先搞清楚Java中序列化的含义: Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息 ...
- 使用virtualenv搭建python3开发环境
问题描述 环境: CentOS6.5 想在此环境下使用python3进行开发,但CentOS6.5默认的python环境是2.6.6版本. 之前的做法是直接从源码安装python3,替换掉现有的开发环 ...
- 原创:jar的名字可能影响maven的依赖下载
自己定义了phoenix4.6-client的依赖关系POM,如下: <project xmlns="http://maven.apache.org/POM/4.0.0" x ...
- [笔记]过期的UBUNTU怎么更新软件包
使用old-releases仓库替换main/security仓库,就像下面这样. sudo sed -i -r 's/([a-z]{2}\.)?archive.ubuntu.com/old-rele ...
- 2、实现不同子网之间的信息交流(互相可以PING通)
一.环境: 二个不同的虚拟子网 VMnet1: 192.168.155.0/24 VMnet8: 192.168.170.0/24 编辑 --> 虚拟网络编辑器 (查看自己的子网,相应修改就行) ...
- Linux下安装jdk1.7、Apache-tomcat7
首先说明下我的主机环境:主机:32位win7 虚拟机:VMware Workstation10.0.1 linux:红帽子centos6.4 jdk1.7 Apache-tomcat7 java环境需 ...
- [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- Jquery揭秘系列:实现$.fn.extend 和$.extend函数
前面我们扩展了bind方法和ready函数,这次我要讲一下$.fn.extend 和$.extend函数. 其他的不多说,直接切入主题吧! 先来看看这两个函数的区别: $.fn.extend是为查询的 ...
- hadoop配置
配置参考博客:(目前有问题,百度说官网的是32bit,现在正在尝试64位 http://www.powerxing.com/install-hadoop-cluster/