什么是python的自省
作者:silencement 时间:2022-04-24 19:06:50
什么是自省?
在日常生活中,自省(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'>
isinstance()
可以使用 isinstance() 函数测试对象,以确定它是否是某个特定类型或定制类的实例:
>>> isinstance("python", str)
True
python自省中help用法扩展:
打开python的IDLE,就进入到了python解释器中,python解释器本身是被认为是一个主模块,然后在解释器提示符>>>下输入一些我们想了解的信息,所以首先我们会先寻求帮助,所以输入help,接着输入help(),我们就进入了help utility,然后循着提示keywords,modules,以了解python的关键字以及python自带的或者我们额外安装和定义的模块,如果要退出,输入'q',然后回车。
如果我们想了解某个对象(python里面所有对象都可以认为是对象),也可以求助也help(),不过要在括号里输入对象的名称,格式help(object),例如help(print),鉴于对象的自省内容太多,有的只粘贴出部分内容。
>>> help
Type help() for interactive help, or help(object) for help about object.
>>> help()
Welcome to Python 3.6's help utility!
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at https://docs.python.org/3.6/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
...
help> keywords
Here is a list of the Python keywords. Enter any keyword to get more help.
False def if raise
None del import return
True elif in try
and else is while
as except lambda with
assert finally nonlocal yield
break for not
class from or
continue global pass
help> modules
Please wait a moment while I gather a list of all available modules...
PIL base64 idlelib runpy
__future__ bdb idna runscript
__main__ binascii idna_ssl sched
_ast binhex imaplib scrolledlist
_asyncio bisect imghdr search
_bisect browser imp
...
Enter any module name to get more help. Or, type "modules spam" to search
for modules whose name or summary contain the string "spam".
>>> help('print')
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
来源:https://www.py.cn/faq/python/12527.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Javascript中的isNaN函数使用说明
Mootools 1.2教程(7)——设置和获取样式表属性
设计与表达
![](https://img.aspxhome.com/file/UploadPic/20097/27/0907_sheji_biaoda_01-84s.jpg)
Python自定义进程池实例分析【生产者、消费者模型问题】
Tensorflow 模型转换 .pb convert to .lite实例
使用MySql和php出现中文乱码的解决方法
关于php开启错误提示的总结
Python基础之条件控制操作示例【if语句】
ASPJPEG组件使用详解(缩略图+水印)
![](https://img.aspxhome.com/file/UploadPic/up/2007091917554027.jpg)
视觉对交互的帮助——提升可用性
![](https://img.aspxhome.com/file/UploadPic/200810/16/20081016132344595s.jpg)
Django model反向关联名称的方法
ASP新闻分页,将一篇过长的文章分页,生成静态页面
PHP基于phpqrcode类生成二维码的方法详解
![](https://img.aspxhome.com/file/2023/0/55310_0s.png)
判断触发器正在处理的是插入,删除还是更新触发
ORACLE 常用的SQL语法和数据对象
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
MySQL身份认证漏洞 升级到5.5.24可修正
基于Python实现定时自动给微信好友发送天气预报
![](https://img.aspxhome.com/file/2023/5/61765_0s.jpg)