isinstance

class A:
pass
class B(A):
pass

b = B()
print isinatance(b,A)
issubclass 判断某一个类是不是另外一个类的派生类

#################################################################

自定义异常
class demoerror(Exception):

def __str__(self):
return 'this is error'

try:
raise demoerror()
except Exception ,e:
print e、
#################################################################

自定义一个带参数的异常
class demoerror(Exception):
def __init__(self,msg):
self.msg = msg

def __str__(self):
if self.msg:
return self.msg
else:
return 'sesesesesseseseese'
try:
raise demoerror('lalalalalalalalalala')
except Exception ,e:
print e
#################################################################

反射:根据参数的名字 动态的调用方法

【1】getattr ---> 获取某个容器的某个函数
---------index.py
import home
res = 'home'
func = getattr(home,res) # 获取 home模块里面的 home函数
res = func() # 执行并且获取返回值
print res

------------home.py
def home():
print 'home'
return 'ok'

结果:
home
ok
【2】 hasattr -->判断某个容器是不是有某个模块
--------index.py
import home
res = 'home'
rus = 'demo'
func1 = hasattr(home,res)
func2 = hasattr(home,rus)
print func1,func2

------------home.py
def home():
print 'home'
return 'ok'
结果:
True False
------------------------------------------------------------
模拟web框架中的使用
-------------webdemo.py

from wsgiref.simple_server import make_server
def RunServer(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
url = environ['PATH_INFO']
temp = url.split('/')[1]
import home

is_exist = hasattr(home.temp)
#home模块中检查有没有跟穿过来url名称一样的方法

if is_exist:
func = getattr(home,temp)
ret = func()
return ret
else:
return '404 not found'

if __name__ == '__main__':
httpd = make_server('',8001,RunServer)
print "SERVER in 8001"
httpd.serve_forever()
----home.py
xxxx
xxxx
xxxx

其他应用
setattr:给某个容器设置一个方法
----index.py
import home
res = 'lala'
func = setattr(home,res,'hello world')
fures = getattr(home,res)
print fures

输出:
hello world

在内存中给home这个空间 设置设置一个方法 res
-----------------------------------
delattr:删除某个函数的方法
import home
res = 'lala'
func = setattr(home,res,'hello world')
#res = getattr(home,res)
#print res
func1 = delattr(home,res)
res1 = hasattr(home,res)
print res1

#################################################################

反射操作类的成员

__author__ = 'Administrator'
class Leo:
start_name = 'rico' def __init__(self):
self.start_name = 'NEO'
def show(self):
print 'show me' @staticmethod
def start_show():
print 'start_show'
@classmethod
def class_show(cls):
print 'class_show' print Leo.__dict__.keys() print hasattr(Leo,'show')
=======================================================
反射导入多层模块
--index.py
__author__ = 'Administrator'
import home cls = getattr(home,'Leo')
print cls
s_name = getattr(cls,"start_name")
print s_name
--home.py
class Leo:
start_name = 'rico' def __init__(self):
self.start_name = 'NEO'
def show(self):
print 'show me'
输出:

home.Leo
rico

----------------

--index.py

__author__ = 'Administrator'
import home cls = getattr(home,'Leo')
obj =cls()
name = getattr(obj,"start_name")
print name
输出:
NEO 前者是类的静态字段 后者是调用类里的方法的静态字段
cls()代表实例化这个类

===========================================

动态导入模块

----home.py

__author__ = 'Administrator'
def index():
print 'index'
return 'return' def home():
pass

---index.py
con,action = raw_input('url:').split('/')
module = __import__(con)
func= getattr(module,action)
ret = func()
print ret

输入输出:

url:home/index #输入
index   --输出
return --输出

==========================================================

												

python基础补漏-09-反射的更多相关文章

  1. Python基础2:反射、装饰器、JSON,接口

    一.反射 最近接触到python的反射机制,遂记录下来已巩固.但是,笔者也是粗略的使用了__import__, getattr()函数而已.目前,笔者的理解是,反射可以使用户通过自定义输入来导入响应的 ...

  2. python基础-类的反射

    1)反射是通过字符串方式映射内存中的对象. python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr, 改四个函数分别用于对对象内部执行:检查是 ...

  3. python基础学习笔记——反射

    对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述pyth ...

  4. python基础-面向对象编程之反射

    面向对象编程之反射 反射 定义:通过字符串对对象的属性和方法进行操作. 反射有4个方法,都是python内置的,分别是: hasattr(obj,name:str) 通过"字符串" ...

  5. python基础补漏-06-其他常用模块

    JSON/Pickle: 首先我们要明白 什么事序列化--> 就是进行不同程序之间的数据交换 那JSON 和Pickle是什么鬼... 就是不同的方式而已 import json name = ...

  6. python基础补漏-06-内置模块

    1> sys 模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的 ...

  7. python基础补漏-04-常用函数

    ----lambda 首先我们说,很遗憾 在python中lambda 仅仅只是一个表达式 那么如何去使用呢? 这个是lambda最简单的使用方式  一般跟map一起配合使用 --map (fun,l ...

  8. python基础补漏-03-函数

    函数:一般来说就是 以功能划分的代码模块 [1] 内置函数 一般我们使用的模块 ---可以大概有个了解 大多数的用法都很简单 2 [函数返回值] 我们应该控制函数的每条分支. 也就是说 我们得到的函数 ...

  9. python基础补漏-02-collection

    collection系列 [1]计数器 Counter import collections res = collections.Counter("34234sdfgs45tsaf1&quo ...

  10. python基础补漏-01

    python对象的方法 1.python的特性:一切皆对象 2 type(obj) 查看对象的类型 3 dir(obj)查看类中所有详细的功能 4 help(obj) 查看类中所有详细的功能 类中的方 ...

随机推荐

  1. fpathconf

    http://pubs.opengroup.org/onlinepubs/009695399/functions/pathconf.html

  2. Python3+Selenium3+webdriver学习笔记12(js操作应用:滚动条 日历 内嵌div)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记12(js操作应用:滚动条 日历 内嵌div)'''from ...

  3. HttpRunner环境搭建

    官方文档地址:http://cn.httprunner.org/官方源码地址:https://github.com/HttpRunner/HttpRunner HttpRunner 是一款面向 HTT ...

  4. CodeForces 48C D - The Race (Fraction,数学)

    每个加油的站可以确定一个alpha的上下界,比如,第i次加油站a[i],前面加了i次油,a[i]*10≤ alpha*i <(a[i]+1)*10. 取最大的下界,取最小的上界,看看两者之间的满 ...

  5. Python-OpenCV——Morphological Transformations(形态学转换)

    目标 这一节 我们将学习不同的形态学操作,如腐蚀.膨胀.开.闭...... 我们将看到不同的函数,如:cv2.erode().cv2.dilate().cv2.morphology() 理论 形态变换 ...

  6. groupmod - 修 改 群 组

    总览 SYNOPSIS groupmod [-g gid [-o]] [-n group_name ] group 描述 DESCRIPTION groupmod 命 令 会 参 照 你 命 令 列 ...

  7. vue 文件流下载xlsx 功能实现

    downLoadFile (url, name) { this.xhr = new XMLHttpRequest() this.xhr.open('GET', url, true) this.xhr. ...

  8. NHibernate使用之详细图解

    本文档适合初级开发者或者是第一次接触NHibernate框架的朋友,其中NHibernate不是最新的版本,但是一个比较经典的版本 NHibernate 2.1.2,其中用红线标注的部分一定要仔细看, ...

  9. exportfs: /mnt/demo requires fsid= for NFS export

    解决方法:/mnt/demo 10.0.1.57(fsid=0,rw,async) //加入fsid=0参数就可.

  10. sqlserver的实例名忘记了

    电脑图标右击/管理/服务和应用程序/服务 也可以直接services.msc打开 打开服务,找到sqlserver的服务,这个服务括号中的名称就是实例名了,但是要加上localhost,也就是loca ...