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

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

反射操作类的成员

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

home.Leo
rico

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

--index.py

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

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

动态导入模块

----home.py

  1. __author__ = 'Administrator'
    def index():
    print 'index'
    return 'return'
  2.  
  3. def home():
    pass
  1.  
  2. ---index.py
  1. con,action = raw_input('url:').split('/')
    module = __import__(con)
    func= getattr(module,action)
    ret = func()
    print ret
  1.  
  2. 输入输出:

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

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

  1.  

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. GreenDao 3.x 注解中ToOne和ToMany的个人理解

    GreenDao是什么东西这个就不用多说了.自从GreenDao升级到3.0之后,编译的方法发生了改变.当然这个改变是有助于快速开发的. 区别在哪随便百度一下都可以知道.这里就不多说了. 这里主要说的 ...

  2. Objective-C Inheritance

    One of the most important concepts in object-oriented programming is that of inheritance. Inheritanc ...

  3. sqlserver中计算某个特殊字符在字符串中出现的位置

    -- ============================================= -- Author: Evan -- Create date: 2018年3月15日10:: -- D ...

  4. 人脸识别 python调用face++ 功能测试

    使用python调用face++的API,调用detect功能,识别人脸 首先进入face++官网注册,获得API Key和API Secret.使用官网提供的免费python api调用功能,提供了 ...

  5. intellij idea自定义快捷键

    intellij idea自定义快捷键比较简单,自带. 首先进入idea,File-->Settings-->Live Templates. 点击右上方的“+”,第一次需要创建一个分组. ...

  6. flash jquery 调用摄像头 vue chrome49浏览器

    flash jquery 调用摄像头 vue chrome49浏览器 这个摄像头,不能一个页面加载多个,只能一个页面显示一次,所以 调用的时候,记得加v-if 把组件销毁,然后从新加载新的 <! ...

  7. 1066: 输入n个数和输出调整后的n个数

    1066: 输入n个数和输出调整后的n个数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2739  Solved: 1578[Submit][Stat ...

  8. Xor Sum

    6498: Xor Sum 时间限制: 1 Sec  内存限制: 128 MB提交: 27  解决: 13[提交][状态][讨论版][命题人:admin] 题目描述 You are given a p ...

  9. 2018.2.14 Java中的哈夫曼编码

    概念 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造 ...

  10. CentOS7-samba文件共享服务

    简介: Samba,是在Unix上实现SMB(Server Message Block)的一个工具套件.而SMB通常是windows用来实现共享的,包括文件和打印机等.而Unix上装上SMB,则使得U ...