美文网首页
Python 反射自省机制

Python 反射自省机制

作者: Sunnky | 来源:发表于2018-05-29 21:32 被阅读0次

反射就是通过字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动。

首先介绍四个内置函数:
hasattr
setattr
getattr
delattr

下面用例子说明:

class A(object):
    
    def __init__(self):
        self.name = "hello"  
        
    def say(self):
        print("say {}".format(self.name))
        
a = A()
hasattr(a, 'name') # 注意: 必须是字符串的 name
>>>True
hasattr(a, 'say')
>>>True
getattr(a, 'name')
>>>'hello'
getattr(a, 'say')
>>><bound method A.say of <A object at 0x10e47a6d8>>
setattr(a, 'name', 'world')
a.name
>>>'world'
getattr(a, 'say')()
>>>say world
delattr(a, 'name')
a.name
>>>Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
AttributeError: 'A' object has no attribute 'name'

delattr(a, 'say') #注意 不能删除实例方法
>>>Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
AttributeError: say

可能有些人会问,这getattr()有什么用呢,我直接a.name,不是照样可以得到实例属性么,没错,如果我们知道这个实例有name属性时,getattr似乎并没有多大的用处,但是当我们不知道实例中有什么属性时,getattr就会配上用场了。

class A(object):
    
    def __init__(self):
        self.name = "hello"  
        
    def say(self):
        print("say {}".format(self.name))
        
    def index(self):
        if hasattr(self, 'render'):
            render = getattr(self, 'render')
            return render('index.html')
        else:
            return '404.html'
        
a = A()
a.index()
>>>'404.html'

a.render = lambda d: d
a.index()
>>>'index.html'

基于发射就可以实现web框架的部分功能,比如路由等等。

相关文章

  • Python 反射自省机制

    反射就是通过字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动。 首先介绍四...

  • PHP反射机制Reflection

    反射机制简介 在面向对象编程中,对象被系统赋予了自省的能力,而实现这个自省的过程就是反射。 ​反射,简单理解就是根...

  • Python 入门 之 反射

    1、反射 : (自省) ​ 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。 Python...

  • Python常见的基础面试题(day02)

    1.Python的自省机制,以及比较常见的自省机制(函数用法) 什么是自省自省就是程序在运行的时候可以明确的知道对...

  • day27-反射和内置方法

    反 射 python是动态语言,而反射(reflection)机制被视为动态语言的关键。 反射机制指的是在程序的运...

  • Java 面试系列:JDK 原生动态代理是怎么实现的 + 面试题

    反射反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect)的能力。简单来说就是...

  • python反射机制

    python根据字符串动态加载模块和类 python作为一种动态解释型语言,在实现各种框架方面具有很大的灵活性。 ...

  • Python 反射机制

    有时候我们会碰到这样的需求,需要执行对象的某个方法,或是需要对对象的某个字段赋值,而方法名或是字段名在编码代码时并...

  • python反射机制

    当我们有多个选项,根据不同值调用不同对象时,不想写很多if—else,就用反射,达到了动态访问、不写死的效果,高内...

  • 第六章、动态代理与反射机制

    反射机制是java语言提供的一种基础功能,赋予程序在运行时自省的能力。通过反射可以直接操作类或者对象,比如获取某个...

网友评论

      本文标题:Python 反射自省机制

      本文链接:https://www.haomeiwen.com/subject/mmfzjftx.html