美文网首页
自省,反射

自省,反射

作者: 快去学习不然怎么去看aimer | 来源:发表于2019-09-25 19:20 被阅读0次

简单理解:
自省相当于只读,反射相当于能读能写(改)

自省

自省常用到函数 dir()
dir() 函数可能是 Python 自省机制中最著名的部分了。
它返回传递给它的任何对象的属性,方法等,并且生成一个列表, 并且这个列表是经过排序的。
如果不指定对象,则 dir()返回当前作用域中的名称。

dir() 函数适用于所有对象类型,包括字符串、整数、列表、元组、字典、函数、定制类、类实例和类方法。
可以试用以下代码来了解

dir(18)

dir('shark')

dir([])

dir(())

dir({})

dir(id)

dir 作用于类和实例对象

lass Person:
       city='bj'
       def __init__(self,name,age):
            self.name = name
            self.age = age
       def foo(self):
             return f"{self.name}"
obj=Person('shark',18)
print(dir(obj))
obj.hobby = 'money'    
 #dir()返回传递给它的任何对象的属性名称列表, 并且这个列表是经过排序的。
 print(dir(obj))     

反射

计算机科学中,反射是指计算机程序运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。 ---- 摘自维基百科

要注意术语“反射”和“内省”(type introspection)的关系。内省(或称“自省”)机制仅指程序在运行时对自身信息(称为元数据)的检测;反射机制不仅包括要能在运行时对程序自身信息进行检测,还要求程序能进一步根据这些信息改变程序状态或结构。 ---- 摘自维基百科

Python 拥有反射机制。

简单的来说,就是利用字符串的形式操作 对象 的相关属性或方法。

Python 拥有反射机制, 就是可以使用字符串操作对象的属性。

这个对象包括:

类对象
类的实例对象
模块
在 Python 中就有下面一组内置的函数来实现反射。

hasattr()  判断一个对象中是否有某个属性

getattr()  获取一个对象中的已有的某个属性

setattr()  添加某个属性给一个对象

delattr()  删除一个对象已有的某个属性

上面几个函数的语法:

hasattr(对象, "对象的属性名称")
注意 对象的属性名称 是字符串

代码实例

class Person:
       city='bj'
       def __init__(self,name,age):
            self.name = name
            self.age = age
       def foo(self):
             return f"{self.name}"
obj=Person('shark',18)
 print(hasattr(Person,'city'))
 print(getattr(Person,'city'))   
 f=getattr(obj,'foo')     获取对象的函数并且调用他
 print(f())
 setattr(obj,'name','xiguatian')      替对象改属性
 print(getattr(obj,'name'))
 delattr(obj,'name')                     将对象的属性删除
 print(getattr(obj,'name','no'))      如果获取不到相应的值会报错,所以加 
                                                      一个默认值 'no'
setattr(obj,'name','wgy')         添加属性并且赋值
print(obj.foo())
print(getattr(obj,'age','name'))   getatter取不到两个值

相关文章

  • PHP反射机制Reflection

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

  • 自省,反射

    简单理解:自省相当于只读,反射相当于能读能写(改) 自省 自省常用到函数 dir()dir() 函数可能是 P...

  • 自省,反射

    简单理解:自省相当于只读,反射相当于能读能写(改) 自省 自省常用到函数 dir()dir() 函数可能是 P...

  • Python 入门 之 反射

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

  • 元类和自省

    自省和反射 自省 (introspection): 可以在运行时获得对象的类型信息 type introspect...

  • Java反射

    反射(Reflection) 反射是Java的一种高级特性,允许运行中的程序自我检查(自省),动态获取类的信息或者...

  • Python反射与自省学习

    1.反射自省的概念 自省:自省就是能够获得自身的结构和方法,给开发者可以灵活的调用,给定一个对象,返回该对象的所有...

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

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

  • Python 反射自省机制

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

  • Apache-Commons包作用说明

    1. Commons BeanUtils 提供对Java反射和自省API的包装。依赖包:Commons Codec...

网友评论

      本文标题:自省,反射

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