文章同步更新于:blog.dalao.icu/archives/34.html,请访问该博客获得更好的阅读体验。


1.什么是自省机制

在编程语言中,自省(introspection)并不是自我反省,而是指自我检查行为。

它的内容包括:

  1. 告诉别人,我是谁
  2. 告诉别人,我能做什么

检查某些事物以确定它是什么,它能做什么,这样,给开发人员带来了极大的灵活性和控制力。

具体的来说,就是OPP(面向对象)语言在程序运行时,能够知道对象的类型,部分语言还能够知道对象所拥有的属性。

自省机制,对很多动态语言(如python)是很重要的机制。

如,python,ruby,object-C, C++等语言都具有自省能力,在这些语言中,C++自省能力最差,只能在运行时得知对象的类型,而python,具有很强的自省能力,不仅能知道运行时对象的类型,还能知道对象所拥有的属性。


2.python中常见的自省机制

在python中,常见的自省(introspection)机制有许多,如:dir()type()hasattr()isinstance()等,通过这些函数,我们可以在运行时得知对象的类型和属性。

dir()

dir()函数是python中自省功能特别常用的一种函数,它返回传递给它的任何对象的属性名称经过排序的列表,如果不指定对象,则dir()函数返回当前作用域中的名称。

a = 2333
print(dir(a))
# 输出省略...

type():

type()函数可以帮忙确定对象的类型,比如确定一个对象是字符串还是整数类型,或者是其他对象的类型,它返回类型对象的名称:

print(tpye(42))
# output:<class 'int'>print(type([1, 2]))
# output:<class 'list'>

hasattr()

虽然使用dir()函数会返回一个对象属性的列表,但我们有时候的需求只是判断一个对象是否含有某一个或者多个属性,这样,我们就可以使用hasattr()函数来完成,它返回一个bool值:

import json
print(hasattr(json, "dumps"))

getattr()

使用hasattr()函数判断对象是否有某个属性值后,我们可以配合getattr()函数来获取其属性值:

print(getattr(json, "__path__"))

使用getattr()获取函数后,我们可以很方便的使用这个函数,比如以下的例子,这样我们就可以不用再使用json.dumps来调用这个函数:

dumps = getattr(json, "dumps")
dumps({"name": "dio"})# 或者以下写法
dumps = josn.dumps
dumps({"name": "dio"})

id():

id()函数返回对象的唯一标识符(也就是对象的地址),标识符是一个整数:

a = 23333
print(id(a))

isinstance():

使用isinstance()函数可以确定一个对象是否是某个特定类型或者定制类的实例:

class A:passclass B(A):passobj = B()print(isinstance(obj, B)) # true
print(isinstance(obj, A)) # true

只要某对象与继承链上的类型进行比较,均会返回True

callable():

使用callable()函数可以确定一个对象是否是可调用对象,比如函数对象,类对象等等,他们都是可调用的对象:

callable("23333") # false
callable(str) # true

python的自省机制相关推荐

  1. python的几种重要机制(垃圾回收机制,猴子补丁,反射机制,自省机制)

    python垃圾回收机制 垃圾回收机制要解决的问题 内存泄漏 悬空指针 引用计数 定义 环形链表中所存放数据的相同点和不同点 无法解决循环引用问题 标记清除 原理: 存在查找活动对象效率低下的问题 隔 ...

  2. Python强大的自省机制

    何为自省 在计算机编程领域里,自省是一种能力,是通过一定机制在程序运行时获知对象的类型及对象的内部结构,Python的自省能力还是很强大的,因为Python中一切皆对象,我们不仅可以获取对象的类型,还 ...

  3. python的自省到底有什么用

    自省是什么? 但从字面意义上来看,自省可以理解为自我反省的一个意思,我第一次理解这个词还是在小学课本上的神农尝百草中,神农的身体是透明的,吃下任何草药都可以看到其药效释放的过程. 而在python中说 ...

  4. 深入探讨Python的import机制:实现远程导入模块 | CSDN博文精选

    来源 | Python编程时光(ID:Python-Time) 所谓的模块导入,是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用. 也许你看到这个标题,会说我怎么会发这么基础的文章? 与 ...

  5. 关于R和Python的安全机制

    关于R和Python的安全机制 对于Python: >>> x = [1,2,3,4] >>> y = x >>> x[0] = 100 > ...

  6. python 释放变量所指向的内存_通俗易懂的Python垃圾回收机制及内存管理

    Python垃圾回收机制及内存管理 内存管理: 先定义一个变量 name='wxl' 那么python会在内存中开辟一小块区域存放"wxl",此时变量的值是我们真正想要存储的,wx ...

  7. python是不是特别垃圾-python垃圾回收机制

    python中有自动内存回收机制,一般情况不需要程序员来处理,面试时被大佬问到了,记录一下.没有画图,推荐读参考的第一篇博文 gc方式1:引用计数 若此对象无其他对象引用,则立马回收掉 优点:简单.实 ...

  8. python是不是特别垃圾-谈谈python垃圾回收机制

    什么是垃圾回收机制? 首先,咱先来解释名词,垃圾回收是不是就是将没用的,废弃的东西回收起来. 在坐的各位都没有女朋友对吧,那难以想象你们的房间会是一个什么样子,可能会有很多垃圾,很凌乱,自己也不收拾. ...

  9. python是不是特别垃圾-深度解析Python垃圾回收机制(超级详细)

    我们知道,目前的计算机都采用的是图灵机架构,其本质就是用一条无限长的纸带,对应今天的存储器.随后在工程学的推演中,逐渐出现了寄存器.易失性存储器(内存)以及永久性存储器(硬盘)等产品.由于不同的存储器 ...

  10. python垃圾回收离职_谈谈python垃圾回收机制

    什么是垃圾回收机制? 首先,咱先来解释名词,垃圾回收是不是就是将没用的,废弃的东西回收起来. 在坐的各位都没有女朋友对吧,那难以想象你们的房间会是一个什么样子,可能会有很多垃圾,很凌乱,自己也不收拾. ...

最新文章

  1. 计算机缺失缺少mfc110.dll等相关文件的解决办法
  2. 快照复制,事务复制,合并复制的区别
  3. 2019年中国工业机器人首次出口数量大于进口数量
  4. win7安装matlab的问题,安装matlab7.0出现问题,我是win7+64位系统,求解
  5. 高流量站点NGINX与PHP-fpm配置优化
  6. 我的软件项目过程管理经验
  7. GOOGLE卫星地图贴图错误一例
  8. 网络语言维c是什么意思,我不要你觉得,我要我觉得!19年网络流行词是这些!...
  9. Docker 学习笔记 -- kuangshen Docker 视频学习笔记
  10. python 宏观经济_Sargent数量经济:回归分析与Python
  11. 【Web_接口爬虫_Python3_百度一下_requestjsonetree】百度一下,检索“成都”,爬取标题、内容、链接地址,保存文本_20200301
  12. lisp常用函数-颜麓
  13. 用 C++ 在Windows中清空回收站内文件/隐藏和显示桌面图标 / Windows任务栏 / 任务栏时钟 / 更改桌面壁纸
  14. 弘辽科技:学会正确竞品分析,与同行竞争对手抢流量
  15. 调用模板类出现undefined reference to的情况及解决方案
  16. IDEA/AndroidStudio 一键自动添加Copyright
  17. 第五季完美童模 亲善大使周懿辰现场走秀回顾
  18. 科学前沿,AI共创 ┃ AI for Science 助力各行业高质量发展
  19. tomcat打印日志 linux,Tomcat关闭日志输出
  20. 现货交易,你要了解哪些事

热门文章

  1. TTL 电路 COMS 电路 区别
  2. Labwindows扫盲+技巧贴,CVI学习必看
  3. 8.21: Hackday、慈善x快速迭代
  4. 共享黑名单是行业潜规则
  5. 台式计算机windows7系统怎么做,台式电脑怎么在线一键重装win7操作系统
  6. react 首页加载loading
  7. 爬取当当网评论(1)
  8. php 公众号授权登录,微信公众号授权登录
  9. win10 多任务 多视图 多窗口 处理快捷键
  10. vant-list上拉加载onload事件触发多次