python基础补漏-09-反射

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

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

时间: 2024-08-04 13:32:12

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

python基础学习09(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #什么是函数 #就是引用,创建,使用 #例子 def foo(): print '233' foo() #返回与函数类型 def foo1():#是一个过程 print 'hello world!' foo1() foo

Python基础教程09:面向对象的进一步拓展

怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库,乱花渐欲迷人眼.我一直希望写一个快速的.容易上手的Python教程,而且言语简洁,循序渐进,让没有背景的读者也可以从基础开始学习.我将在每一篇中专注于一个小的概念,希望在闲暇时可以很快读完. 小提醒 教程将专注于Python基础,语法基于Python 2.7 (我会提醒Python 3.x中有变化的地方,以方便读者适应3.X的情况).测试环境为Linux.标准库的一些包不适用于Wind

Python基础day-22[面向对象:反射,其他命令参数]

反射: 什么是反射: 主要是指程序可以访问,检测和修改本身状态或行为的一种能力. Python中的一切事物都是对象. 四个实现自省的函数: 类和对象均可以使用. class A: name = 'abc' age = 19 #类的使用 print(hasattr(A,'n1me')) #判断类是否含有某个属性 hasattr(类或者对象名,属性名) print(getattr(A,'name')) #获取对应属性的属性值 getattr(类或者对象名,属性名,出错返回的内容) <----出错返回

python基础补漏-01

python对象的方法 1.python的特性:一切皆对象 2 type(obj) 查看对象的类型 3 dir(obj)查看类中所有详细的功能 4 help(obj) 查看类中所有详细的功能 类中的方法: __fun__:内置方法 可能有多钟致执行方法 fun:只有一种执行方法 obj.fun() -------------------- 字符串好用的方法: str = "my name is  what" str.cout('m',0,2)  ---字符串从下标 0到2 之间的字符

python基础补漏-03-函数

函数:一般来说就是 以功能划分的代码模块 [1] 内置函数 一般我们使用的模块 ---可以大概有个了解 大多数的用法都很简单 2 [函数返回值] 我们应该控制函数的每条分支. 也就是说 我们得到的函数执行完之后的信号,就是其中一条分支的结果 在python中 通过return 关键字 返回一个对象 3[参数] value -参数就是值 我们说的穿参 就是传值 那么实参跟形参的差别.就是在不同的函数空间的不同值 实参我们通常指的是全局空间的参数 形参通产指的是函数空间所使用的参数 那么python

Python基础学习09

流程控制-条件判断 1.if语句 语法: if 条件表达式: 语句1 语句2 语句3 ... 条件表达式就是计算结果必须为布尔值的表达式 表达式后面的冒号不能少 注意if后面的出现的语句,如果属于if语句块,则必须同一个锁紧等级 条件表达式结果为True执行if后面的缩进的语句块 var1 = 1 if var1: print("1 - if 表达式条件为 true") print(var1) var2 = 0 if var2: print("2 - if 表达式条件为 tr

python基础练习题09

在控制台连续输出五行*,每一行星号的数量依次递增 row=1 while row<=5: col=1 while col<=row: print('*',end='') col+=1 print() row+=1 # 输出结果 # * # ** # *** # **** # ***** 02: row=5 while row>=1: col=1 while col<=row: print('*',end='') col+=1 print('') row-=1 # 输出结果 # **

Python基础09 面向对象的进一步拓展

Python基础09 面向对象的进一步拓展 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们熟悉了对象和类的基本概念.我们将进一步拓展,以便能实际运用对象和类. 调用类的其它信息 上一讲中提到,在定义方法时,必须有self这一参数.这个参数表示某个对象.对象拥有类的所有性质,那么我们可以通过self,调用类属性. class Human(object): laugh = 'hahahaha' def show_laugh(

Python基础(18)_面向对象程序设计2(反射、__str__、__del__、__item__系列)

一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo)) issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo(object): pass class Bar(Foo): pass print(issubcla