什么是自省?

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

计算机编程中,自省是指这种能力:检查某些事物以确定它是什么、它知道什么以及它能做什么。自省向程序员提供了极大的灵活性和控制力

说的更简单直白一点:自省就是面向对象的语言所写的程序在运行时,能够知道对象的类型。简单一句就是,运行时能够获知对象的类型

例如python, buby, object-C, c++都有自省的能力,这里面的c++的自省的能力最弱,只能够知道是什么类型,而像python可以知道是什么类型,还有什么属性。

最好的理解自省就是通过例子: Type introspection  这里是各种编程语言中自省(introspection)的例子(这个链接里的例子很重要,也许你很难通过叙述理解什么是introspection,但是通过这些例子,一下子你就可以理解了

回到Python,Python中比较常见的自省(introspection)机制(函数用法)有: dir(),type(), hasattr(), isinstance(),通过这些函数,我们能够在程序运行时得知对象的类型,判断对象是否存在某个属性,访问对象的属性。

 dir()

 dir() 函数可能是 Python 自省机制中最著名的部分了。它返回传递给它的任何对象的属性名称经过排序的列表。如果不指定对象,则 dir() 返回当前作用域中的名称。让我们将 dir() 函数应用于 keyword 模块,并观察它揭示了什么:

>>> import keyword
>>> dir(keyword)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'iskeyword', 'kwlist', 'main']

 type()
 type() 函数有助于我们确定对象是字符串还是整数,或是其它类型的对象。它通过返回类型对象来做到这一点,可以将这个类型对象与 types 模块中定义的类型相比较:

>>> type(42)
<class 'int'>
>>> type([])
<class 'list'>


  hasattr()

 对象拥有属性,并且 dir() 函数会返回这些属性的列表。但是,有时我们只想测试一个或多个属性是否存在。如果对象具有我们正在考虑的属性,那么通常希望只检索该属性。这个任务可以由 hasattr() 和 getattr() 函数来完成.

>>> hasattr(id, '__doc__')
True

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

>>> isinstance("python", str)
True

转载于:https://www.cnblogs.com/yuanjiangw/p/9767663.html

Introspection in Python How to spy on your Python objects Guide to Python introspection相关推荐

  1. python语言包括哪些实现_Python语言基础考察点:python语言基础常见考题(一)

    一.python是静态还是动态类型?是强类型还是弱类型? 1.动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2.动态还是静态指的是编译期还是运行期确定类型 3.强类型指的是不会发生隐式类型转 ...

  2. PEP 8 – Style Guide for Python Code

    PEP 8 – Style Guide for Python Code PEP 8–Python编码规范 原文地址:https://www.python.org/dev/peps/pep-0008/ ...

  3. 在翻译PEP8中学习 -- Style Guide for Python Code

    翻译了好久, 终于把这篇文档翻完了, 学到很多. 自从考研结束后就没有翻译过文章了, 一开始还以为考研英语78分的我翻译能力还可以, 结果打脸. 凡是得练习啊! 官方原文: PEP8 Style Gu ...

  4. 怎么用python画个电脑_python语言还是java如何用python画爱心

    用python绘制爱心的基本步骤如下: 002pc.com对<python语言还是java如何用python画爱心>总结来说,为我们学习Python很实用. 首先先下载安装好python程 ...

  5. python selenium脚本_怎样开始写第一个基于python的selenium脚本

    1.下载并安装python(http://www.python.org/geti/). 2.安装selenium(http://pypi.python.org/pypi/selenium)下载并解压缩 ...

  6. python能做出什么样的网站_我能用Python做什么?

    如果你想学Python,或者你刚开始学习Python,那么你可能会问:"我能用Python做什么?" 这个问题不好回答,因为Python有很多用途. 但是随着时间,我发现有Pyth ...

  7. python django web典型模块开发实战下载_Django实战 Python Web典型模块与项目开发

    本书结合样例,介绍 Django 的基础知识.主要模块的开发以及权限管理等高级内容,并且通过图书管理系统.博客系统.车费管理系统 3 个项目的开发实战,使读者既能掌握 Django 的重要开发技术,又 ...

  8. python学好了能干啥_新手该如何学python怎么学好python?_python学好了能干什么

    1)学好python的第一步,就是马上到www.python.org网站上下载一个python版本.我建议初学者,不要下载具有IDE功能的集成开发环境,比如Eclipse插件等. 2)下载完毕后,就可 ...

  9. python游戏中调整箭头下落速度_入门 | 三行Python代码,让数据预处理速度提高2到6倍...

    原标题:入门 | 三行Python代码,让数据预处理速度提高2到6倍 选自TowardsDataScience 作者:George Seif,机器之心编译 在 Python 中,我们可以找到原生的并行 ...

最新文章

  1. layuiadmin上手好难_新手自学板绘先学SAI还是PS好?零基础绘画入门需知!
  2. android手机系统的启动流程-secureboot流程(以MTK平台为例)
  3. Alpha版(内部测试版)发布
  4. vue 组件基本使用
  5. 技巧篇-图层叠加之美(一)
  6. GRC: 个人信息保护法, 个人隐私, 企业风险合规治理
  7. 通过V90PN通讯故障实例来看线路干扰与线路错误的区别
  8. 小程序用户协议页面实现
  9. 运动式耳机品牌排行榜,运动耳机排名前六
  10. 全国计算机等级考试(NCRE)
  11. html标签栏logo怎么加,在htmltitle/title标签添加图标,网页title左边显示网页的logo图标...
  12. idea 配置文件中的中文与ASCII码互转
  13. React技术栈探究-Redux
  14. word与spoolsv.exe占CPU过高
  15. 【bzoj1123】BLO
  16. linux系统能看抖音吗,用电脑如何刷抖音?电脑刷抖音方法你知多少
  17. Python爬虫学习笔记 (9) [初级] 小练习 爬取慕课网课程清单
  18. 一个财主的故事-----从银行复利认识无理数e
  19. XP下安装SQL2005
  20. 智慧校园:学校机房如何实现科学化管理?

热门文章

  1. debian安装搜狗
  2. 戴帽子对眼睛是否有好处
  3. flink写入hive的时区问题
  4. GenericUDTF使用流程记载(转载+自己整理)
  5. ubuntu下面pycharm设置pyspark的配置
  6. RuntimeError: readexactly() called while another coroutine is already waiting for incoming data
  7. colab中安装lightgbm的GPU版本
  8. RStudio修改快捷键确保每次运行都是从头运行所有代码
  9. hexo右下角弄一个live2d的卡通动画小人
  10. 论文原文解读汇总(持续更新中)