首页 > 其他分享 >自省与反射机制

自省与反射机制

时间:2022-08-29 14:25:55浏览次数:62  
标签:__ 反射 setattr Point 对象 机制 自省 属性

自省

在日常生活中,自省(introspection)是一种自我检查行为。

在计算机编程中,自省是指这种能力:检查对象以确定它是什么类型、它有哪些属性和哪些方法。自省向程序员提供了极大的灵活性和控制力。

python中的自省函数有很多,凡是可以检查对象状态的函数都可以称为自省函数,常用的自省函数如下:

  • type

type函数可以返回一个对象的类型

>>> type(1)
int
  • isinstance

检查一个对象是否是某个或某些类型的实例

>>> isinstance(1, int)
True
  • issubclass

检查一个类是否是某个或某些类的子类

>>> issubclass(bool, int)
True
  • dir

返回一个传入对象的属性名和方法名的字符串列表

>>> print(dir(1))
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

反射

反射就是动态的操作对象。

简单的讲就是根据字符串形式的属性名方法名操作对应的对象。

python中的反射函数如下:

  • hasattr

检查一个对象是否有给定名称的属性

>>> hasattr([1,2,3], 'append')
True
  • getattr

返回一个对象给定名称的属性

getattr(x,'y') 等价于 x.y

>>> class Point:
...     name = '点'
>>> getattr(Point,'name')
'点'
  • setattr

给一个对象添加一个给定名称的属性

setattr(x, 'y', v) 等价于 x.y = v

>>> setattr(Point,'x',1)
>>> Point.x
1
  • delattr

删除对象的一个给定名称的属性

delattr(x, 'y') 等价于del x.y

>>> delattr(Point, 'x')
>>> Point.x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'Point' has no attribute 'x'

自省和反射机制的灵活运行需要大量的练习和阅读源码。

标签:__,反射,setattr,Point,对象,机制,自省,属性
From: https://www.cnblogs.com/superwuchaofan/p/16635778.html

相关文章

  • Golang 中反射的应用与理解
    Golang中反射的应用与理解https://mp.weixin.qq.com/s/TmzV2VTfkE8of2_zuKa0gAGolang中反射的应用与理解原创 赵燕辉 字节跳动技术团队 2022-08-2312:00 发表于......
  • 泛型的具体使用以及反射赋值
    泛型必须要有<T>不然编译报错TresponseDto,Class<T>tClass这个必须是同一个类传过来publicclassBindCardHelperTest{publicstaticvoidmain(String[]args)......
  • java反射技术的简单应用
    一.反射介绍java反射技术的应用广泛,能够对类的方法和参数进行配置,完成对象的初始化工作,增加了java的灵活性,SpringIOC也使用了反射技术,下文主要讲解对象的构建和方法的反射......
  • 信息安全机制有哪些
    前言关于近期学习,为了更好强化知识巩固。全面概括知识重点。做好笔记,以便后续查找。安全信息概括特性完整性保密性可用性不可否认性可控性信息安全......
  • Spring中的SPI机制
    前言在面向对象编程领域中,六大原则之一的依赖倒置原则提到的原则规定:高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口;抽象接口不应该依赖于具体实现,而......
  • Django入门到放弃之缓存及信号机制
    1.缓存介绍在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面.当一个网站的用户访问量很大的时......
  • Envoy 集群故障处理机制
    故障处理机制Envoy提供了一系列开箱即用的故障处理机制;超时(timeout)有限次数的重试,并支持可变的重试延迟主动健康检查与异常探测连接池断路器所有......
  • python内存管理机制
    python作为一门解释型语言,以代码简洁易懂著称。我们可以直接对名称赋值,而不必声明类型。名称类型的确定、内存空间的分配与释放都是由python解释器在运行时进行的。python......
  • 操作系统的运行机制
    1.1用户空间与内核空间(用户态/管态)内核程序----应用程序核心态-----用户态特权指令-----非特权指令1.2时钟管理计时器:提供系统时间时钟中断:进程切......
  • JAVA的运行机制
    编译型compile用编译器一次性解释一个文件解释型一句一句的解释翻译解释型语言和编译型语言的区别是:1、类型不同,解释型语言每次运行是需要将源代码解释成机器码,然后......