码迷,mamicode.com
首页 > 编程语言 > 详细

python 反射笔记

时间:2016-06-20 22:22:46      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:python   return   import   字符串   如何   


反射:是指以字符串的形式传入要执行的对象或者要获取的信息

以下以代码的执行步骤来演示:
创建一个包:
test:
   ——__init__
   ——fanshe.py
   ——main.py

fanshe.py

GB = ‘这是全局变量‘  

def func1():
    return ‘这是反射函数func1的结果‘

def func2():
    return ‘这是反射函数func2的结果‘

def func3():
    return ‘这是反射函数func3的结果‘

main.py

# #不算正真的反射
DO = __import__("fanshe")
print DO.GB   #如何DO.xxxx错了的话就报错
DO.func1()     #执行func1函数


#第一种:导入模块的反射
import  fanshe
A = getattr(fanshe,‘GB‘)  #getattr获取fanshe模块的‘GB‘对象
print A

B = getattr(fanshe,"func1",None)   #getattr获取fanshe模块的‘func1‘函数对象,None值是当fanshe模块中不存在字符串中指定的函数时,不报错
print B()

setattr(fanshe,‘GB‘,‘哈哈‘)
print fanshe.GB

print hasattr(fanshe,"GB")   #hasattr判断在模块或者类对象内是否含有某字符串对象,有则返回True,无则返回False



#第二种:定义类的反射
class Cat(object): # 类,Cat指向这个类对象
    def __init__(self, name=‘MR.milk‘):
        self.name = name
    def sayHi(self): #  实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问
        print self.name, ‘says Hi!‘ # 访问名为name的字段,使用实例.name访问

cat = Cat()
print  cat.name

print  hasattr(cat,‘name‘)       #hasattr判断在模块或者类对象内是否含有某字符串对象,有则返回True,无则返回False

func = getattr(cat,"sayHi",None)  #getattr获取模块对象或者类对象的字符串函数,并赋值func对象
func()                             #加()执行func对象

setattr(cat,"name",‘MK‘)         #setattr设置(无则添加)模块对象(或类对象)的某函数(字符串形式)的值
print cat.name


setattr(cat,‘count‘,lambda x:x+1)#setattr则添加count函数到cat模块对象(或类对象)
r = getattr(cat,‘count‘)
print r(2)


本文出自 “MK_linux” 博客,请务必保留此出处http://wengmengkai.blog.51cto.com/9016647/1791180

python 反射笔记

标签:python   return   import   字符串   如何   

原文地址:http://wengmengkai.blog.51cto.com/9016647/1791180

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!