Python 3 深入类和对象 · 2021年8月26日 0

Python对象的自省机制

定义:自省是通过一定的机制查询到对象的内部结构

只看教程操作,不看原理和自省机制的概要,哪里知道自省机制可以干什么!

此文参考知乎用户黄艺大佬的文章,原文地址(膜拜大佬!):https://zhuanlan.zhihu.com/p/74693264

在计算机编程中,自省是一种对象自我检查的能力,它可以检查自己是什么知道什么、能做什么。比如检查自己有什么属性、有什么方法。这是最简单的理解,作为初学者呢,掌握好这些基本的自省就可以了。日后等基础牢固了,可以学习自省的更高级的机制也就是反射。这个机制不但可以检测自己是什么、可以干什么。还能修改自己的行为,使自己可以干什么,意思就是可以动态的给自己添加函数、属性之类的,也就是我们说的戏精。

(复制过来的!)

操作看懂了,人却懵逼了

Python一些常用的自省函数

主要有一下几个内置函数

help

dir

还有一个模块:keywork模块

help

通过输入help(‘print’)命令

就可以获得关于print的相关解释

大约包括此函数是什么(是什么语句),为什么(运行原理)怎么办(可以用来干什么)

最后会告诉你一些跟print有关联的关键词

看完之后可使用Ctrl+q+p退出,使用Ctrl+c无法退出!

dir

(复制)我们常常会引用一些模块,不管是内置模块还是第三方模块或者自己开发的模块,都不可能记住每个模块里面都有什么属性、方法之类的。如果遇到一个模块我们记不住里面的某个属性,这时候一般都会去看该模块的源代码。但这并不是最好的办法,实际上最省力的办法就是,用dir函数,这个内置的函数会给我们答案。

keywork模块

>> import keyword
>>
>> print(keyword.kwlist)
>>
>> [‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]

引用keywork模块

因为它里面的信息都是硬写进去的实际用处不大,这里只是为了方便了解内置模块有哪些,python关键词有哪些,才用到它。

比如上面的演示,使用keyword模块查看python中的关键词

查找当前作用域有什么对象

调用dir函数,如果不传递任何参数,默认是查找当前命名空间有什么对象。

里面大部分都是一些内置函数,目前的作用域也没有什么东西

当然,你也可以使用print(dir(builtins))查看函数的对象

检查对象的文档描述

一般是通过print(dir.doc)来查看dir的对象描述

特别说明:

这里说明一下,__ doc __的描述来源主要是这个:

看演示:

参考前后对比,

doc描述主要对象是注释!

实际的用处

还是参考大佬的吧:

本文章90%的内容为转载https://zhuanlan.zhihu.com/p/74693264 所得!

署名:知乎黄艺,知乎主页:https://www.zhihu.com/column/c_1102638641079312384