什么是反射?

1、有时我们要访问某个变量或是方法时并不知道到底有没有这个变量或方法,所以就要做些判断。判断是否存在字符串对应的变量及方法。
2、我们知道访问变量时是不能加引号的,否则会被当成字符串处理。如果要通过字符串找到对应的变量,那该怎么办呢

反射就是用于解决上面两个问题而产生的,所谓反射,按我的理解就是反过来告诉我字符串是什么,是变量or方法

python中访问类或对象的成员有三种方法

##如下所示 obj 为对象 var为变量 func为函数
1、obj.var 或 obj.func()
2、obj.__dict__['var']
3、getattr(obj,'var')


反射有4个方法 getattr() hasattr() setattr() delattr()


举例子如下,一目了然

class A(object):
    gvar = 'min'
    def __init__(self,name,male):
        self.name = name
        self.male = male
    def func1(self):
        print "func1 :my name is %s" % self.name
    def func2(self):
        print "func2 :I'm a %s" % self.male

##实例化对象
obj = A('min','girl')
hasattr(obj,'gvar')
hasattr(obj,'func1')
getattr(obj,'gvar')
getattr(obj,'name')
getattr(obj,'func1')
getattr(obj,'func2')()
setattr(obj,'gvar','ben')
getattr(obj,'gvar')
delattr(obj,'gvar')
##python中一切事物都是对象,故其实上面的obj也是可以是类名,模块名
getattr(A,'func2')
hasattr(A,'func1')

#当某个字符串就是模块名时,我们导入模块时可以用以下方法导入
mymodule = __import__(var) #这个就相当于导入模块var.py了

导入后,你可以在你的代码中用mymodule.*来调用该模块下的任意方法

>>> class A(object):
...     gvar = 'min'
...     def __init__(self,name,male):
...         self.name = name
...         self.male = male
...     def func1(self):
...         print "func1 :my name is %s" % self.name
...     def func2(self):
...         print "func2 :I'm a %s" % self.male
...
>>> ##实例化对象
... obj = A('min','girl')
>>> hasattr(obj,'gvar')
True
>>> hasattr(obj,'func1')
True
>>> getattr(obj,'gvar')
'min'
>>> getattr(obj,'name')
'min'
>>> getattr(obj,'func1')
<bound method A.func1 of <__main__.A object at 0x7f7b89f99a50>>
>>> getattr(obj,'func2')()
func2 :I'm a girl
>>> setattr(obj,'gvar','ben')
>>> getattr(obj,'gvar')
'ben'
>>> delattr(obj,'gvar')
>>> ##python中一切事物都是对象,故其实上面的obj也是可以是类名,模块名
... getattr(A,'func2')
<unbound method A.func2>
>>> hasattr(A,'func1')
True

Python之反射机制的更多相关文章

  1. python的反射机制

    转载自:http://www.cnblogs.com/feixuelove1009/p/5576206.html 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作 ...

  2. 简单谈谈python的反射机制

    转:http://www.jb51.net/article/87479.htm 本文主要介绍python中的反射,以及该机制的简单应用,熟悉JAVA的程序员,一定经常和Class.forName打交道 ...

  3. 【转】简单谈谈python的反射机制

    [转]简单谈谈python的反射机制 对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面 ...

  4. 详解python之反射机制

    一.前言 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): print('f4') a = 1 t ...

  5. python之反射机制与callattr()、issubclass()、isinstance、type()相关

    一.反射机制 * 反射可以理解为 通过字符串的形式,动态导入模块: 利用字符串的形式,在对象(模块)中操作(查找/获取/删除/添加)成员,是一种基于字符串的事件驱动! 反射机制的内置函数 # hasa ...

  6. Python 的反射机制

    什么叫做反射 利用字符串的形式去对象(模块)中操作(查找/添加/获取/删除)成员,一种基于字符串的事件驱动. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型.然后,可以 ...

  7. python面向对象--反射机制

    class Black: feture="ugly" def __init__(self,name,addr): self.addr=addr self.name=name def ...

  8. python反射机制深入分析

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

  9. python 反射机制在实际的应用场景讲解

    剖析python语言中 "反射" 机制的本质和实际应用场景一. 前言 def s1(): print("s1是这个函数的名字!") s = "s1&q ...

随机推荐

  1. Android开发教程:开发框架基本原理

    1.提供应用程序框架(Framework) 开发者可以遵照这些框架搭建应用程序读者可以结合J2SE平台的Applet框架或J2ME平台的移动信息设备套件框架来理解Android平台的应用程序框架. 每 ...

  2. nfs 存储服务

    今日内容: NFS 1.什么是nfs? network file system 网络文件系统 nfs共享存储 2.nfs能干什么? nfs 能为 不同主机系统之间 实现 文件的共享 3.为什么要使用n ...

  3. Day 16 软件管理

    1.RPM基本概述 1.什么是rpm? RPM全称 RPM Package Manager 缩写,由红帽开发用于软件包的安装升级卸载与查询 2.如何获取rpm包 在我们刚开始学习rpm包,建议先使用本 ...

  4. 构建企业级数据湖?Azure Data Lake Storage Gen2实战体验(中)

    引言 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 因此数据湖相关服务 ...

  5. 安装Winservices服务出现“设置服务登录”

    安装服务时出现  设置服务登录  窗口 别紧张   将serviceProcessInstaller1   Account 设置为LocalSystem 即可

  6. [Leetcode][动态规划] 零钱兑换

    一.题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: ...

  7. python常用数据结构讲解

    一:序列     在数学上,序列是被排成一排的对象,而在python中,序列是最基本的数据结构.它的主要特征为拥有索引,每个索引的元素是可迭代对象.都可以进行索引,切片,加,乘,检查成员等操作.在py ...

  8. centos使用android studio遇到的一些问题

    1.下载完成后进入bin目录启动 ./studio 2. 由于google被墙,SDK 下载不了, 照此教程添加下载源 http://jingyan.baidu.com/album/adc815137 ...

  9. ubuntu linux重置密码

    (和网上的有点不一样,记录一下) 1)重启系统,同时长时间按住shift键进入grub菜单:GNU GRUB version 1.99-12ubuntu5(如图一) 2)选择Ubuntu, with ...

  10. 面试并发volatile关键字时,我们应该具备哪些谈资?

    提前发现更多精彩内容,请访问 个人博客 提前发现更多精彩内容,请访问 个人博客 提前发现更多精彩内容,请访问 个人博客 写在前面 在 可见性有序性,Happens-before来搞定 文章中,happ ...